def fleet_id_change(self, cr, uid, ids, order_fleet_id=False, fleet_id=False, product_id=False, maintenance_start_date=False, maintenance_product_qty=False): result = {} result['value'] = {} fleet_id = order_fleet_id or fleet_id if fleet_id: fleet = self.pool.get('stock.location').browse(cr, uid, fleet_id) if fleet.expire_time and not fleet.is_expired: start_date = DateTime.strptime(fleet.expire_time, '%Y-%m-%d') + RelativeDateTime(days=fixed_days_before_month_end + 1) else: start_date = maintenance_start_date and DateTime.strptime(maintenance_start_date, '%Y-%m-%d') or DateTime.strptime(self.default_maintenance_start_date(cr, uid, {}), '%Y-%m-%d') end_date = self._get_end_date_from_start_date(cr, uid, start_date, fleet) result['value'].update({'fleet_id': fleet_id}) if product_id: product = self.pool.get('product.product').browse(cr, uid, product_id) if product.is_maintenance: maintenance_month_qty = self._get_maintenance_month_qty_from_start_end(cr, uid, start_date, end_date) result['value'].update({'maintenance_start_date': start_date.strftime('%Y-%m-%d')}) result['value'].update({'maintenance_end_date': end_date.strftime('%Y-%m-%d')}) result['value'].update({'maintenance_month_qty': maintenance_month_qty}) result['value'].update({'product_uom_qty': maintenance_product_qty * maintenance_month_qty}) result['value'].update({'product_uos_qty': maintenance_product_qty * maintenance_month_qty}) # TODO * product_obj.uos_coeff return result
def maintenance_qty_change(self, cr, uid, ids, maintenance_product_qty=False, maintenance_month_qty=False, maintenance_start_date=False, maintenance_end_date=False, is_maintenance=False, fleet_id=False): result = {} if not is_maintenance: return result result['value'] = {} warning_messages = "" if maintenance_start_date: start = DateTime.strptime(maintenance_start_date, '%Y-%m-%d') if start.day != fixed_month_init_day: warning_messages += "- Start date should should ideally start at day %s of the month; corrected to day %s\n" % (fixed_month_init_day, fixed_month_init_day) start = DateTime.DateTime(start.year, start.month, fixed_month_init_day) result['value'].update({'maintenance_start_date': start.strftime('%Y-%m-%d')}) #return result if maintenance_end_date: end = DateTime.strptime(maintenance_end_date, '%Y-%m-%d') en_date_check = end + DateTime.RelativeDateTime(days=fixed_days_before_month_end + 1) if end.month == en_date_check.month or en_date_check.day != 1: warning_messages += "- End date should should end %s days before the end of the month! It has been reset to the correct value.\n" % fixed_days_before_month_end day = end.days_in_month - fixed_days_before_month_end end = DateTime.DateTime(end.year, end.month, day, 0, 0, 0.0) result['value'].update({'maintenance_end_date': end.strftime('%Y-%m-%d')}) if maintenance_start_date and maintenance_end_date: if end < start: warning_messages += "- End date should be AFTER Start date!\n" day = start.days_in_month - fixed_days_before_month_end #then we set the minimal end date end = DateTime.DateTime(start.year, start.month, day, 0, 0, 0.0) result['value'].update({'maintenance_end_date': end.strftime('%Y-%m-%d')}) maintenance_month_qty = self._get_maintenance_month_qty_from_start_end(cr, uid, start, end) result['value'].update({'maintenance_month_qty': maintenance_month_qty}) if maintenance_month_qty < min_maintenance_months: warning_messages += "- we usually try to sell %s months at least!\n" % min_maintenance_months if fleet_id: fleet = self.pool.get('stock.location').browse(cr, uid, fleet_id) theoretic_end = self._get_end_date_from_start_date(cr, uid, start, fleet) if theoretic_end.year != end.year or theoretic_end.month != end.month or theoretic_end.day != end.day: warning_messages += "- Theoretic Maintenance End Date was: %s !\n" % theoretic_end.strftime('%Y-%m-%d') if maintenance_product_qty and maintenance_month_qty: #only set the default fleet at init result['value'].update({'product_uom_qty': maintenance_product_qty * maintenance_month_qty}) result['value'].update({'product_uos_qty': maintenance_product_qty * maintenance_month_qty}) # TODO * product_obj.uos_coeff if len(warning_messages) > 1: result['warning'] = {'title': 'Maintenance Dates Warning', 'message': warning_messages} return result
def fleet_id_change(self, cr, uid, ids, order_fleet_id=False, fleet_id=False, product_id=False, maintenance_start_date=False, maintenance_product_qty=False): result = {} result['value'] = {} fleet_id = order_fleet_id or fleet_id if fleet_id: fleet = self.pool.get('stock.location').browse(cr, uid, fleet_id) if fleet.expire_time and not fleet.is_expired: start_date = DateTime.strptime( fleet.expire_time, '%Y-%m-%d') + RelativeDateTime( days=fixed_days_before_month_end + 1) else: start_date = maintenance_start_date and DateTime.strptime( maintenance_start_date, '%Y-%m-%d') or DateTime.strptime( self.default_maintenance_start_date(cr, uid, {}), '%Y-%m-%d') end_date = self._get_end_date_from_start_date( cr, uid, start_date, fleet) result['value'].update({'fleet_id': fleet_id}) if product_id: product = self.pool.get('product.product').browse( cr, uid, product_id) if product.is_maintenance: maintenance_month_qty = self._get_maintenance_month_qty_from_start_end( cr, uid, start_date, end_date) result['value'].update({ 'maintenance_start_date': start_date.strftime('%Y-%m-%d') }) result['value'].update({ 'maintenance_end_date': end_date.strftime('%Y-%m-%d') }) result['value'].update( {'maintenance_month_qty': maintenance_month_qty}) result['value'].update({ 'product_uom_qty': maintenance_product_qty * maintenance_month_qty }) result['value'].update({ 'product_uos_qty': maintenance_product_qty * maintenance_month_qty }) # TODO * product_obj.uos_coeff return result
def _maintenance_month_qty(self, cr, uid, ids, prop, unknow_none, context={}): result = {} for line in self.browse(cr, uid, ids, context=context): if line.maintenance_start_date and line.maintenance_end_date: result[line.id] = self._get_maintenance_month_qty_from_start_end( cr, uid, DateTime.strptime(line.maintenance_start_date, "%Y-%m-%d"), DateTime.strptime(line.maintenance_end_date, "%Y-%m-%d"), ) else: result[line.id] = 0 return result
def fleet_id_change( self, cr, uid, ids, order_fleet_id=False, fleet_id=False, product_id=False, maintenance_start_date=False, maintenance_product_qty=False, ): result = {} result["value"] = {} fleet_id = order_fleet_id or fleet_id if fleet_id: fleet = self.pool.get("stock.location").browse(cr, uid, fleet_id) if fleet.expire_time and not fleet.is_expired: start_date = DateTime.strptime(fleet.expire_time, "%Y-%m-%d") + RelativeDateTime( days=fixed_days_before_month_end + 1 ) else: start_date = ( maintenance_start_date and DateTime.strptime(maintenance_start_date, "%Y-%m-%d") or DateTime.strptime(self.default_maintenance_start_date(cr, uid, {}), "%Y-%m-%d") ) end_date = self._get_end_date_from_start_date(cr, uid, start_date, fleet) result["value"].update({"fleet_id": fleet_id}) if product_id: product = self.pool.get("product.product").browse(cr, uid, product_id) if product.is_maintenance: maintenance_month_qty = self._get_maintenance_month_qty_from_start_end( cr, uid, start_date, end_date ) result["value"].update({"maintenance_start_date": start_date.strftime("%Y-%m-%d")}) result["value"].update({"maintenance_end_date": end_date.strftime("%Y-%m-%d")}) result["value"].update({"maintenance_month_qty": maintenance_month_qty}) result["value"].update({"product_uom_qty": maintenance_product_qty * maintenance_month_qty}) result["value"].update( {"product_uos_qty": maintenance_product_qty * maintenance_month_qty} ) # TODO * product_obj.uos_coeff return result
def create_analytic_lines(self, cr, uid, ids, context={}): res = super(account_move_line, self).create_analytic_lines(cr, uid, ids, context) matched_invoice_line_ids = [] for move_line in self.browse(cr, uid, ids, context): if move_line.analytic_lines and len(move_line.analytic_lines) == 1 and move_line.product_id.is_maintenance and move_line.invoice: print "native analytic line creation" print move_line analytic_line = move_line.analytic_lines[0] #we assume their is only one analytic line for a maintenance product print analytic_line for invoice_line in move_line.invoice.invoice_line: if invoice_line.id not in matched_invoice_line_ids: #we take care of not matching invoice line twice if invoice_line.product_id and invoice_line.product_id.is_maintenance \ and invoice_line.product_id.id == analytic_line.product_id.id and analytic_line.amount == invoice_line.price_subtotal: matched_invoice_line_ids.append(invoice_line.id) month_qty = int(invoice_line.maintenance_month_qty) splitted_amount = invoice_line.quantity / invoice_line.maintenance_month_qty amount = float(analytic_line.amount) / float(invoice_line.maintenance_month_qty) start_date = DateTime.strptime(invoice_line.maintenance_start_date, '%Y-%m-%d') self.pool.get('account.analytic.line').write(cr, uid, analytic_line.id, {'invoice_line_id':invoice_line.id, 'date':start_date, 'unit_amount':splitted_amount, 'amount': amount}) for i in range(1, month_qty): start_date += DateTime.RelativeDateTime(months=1) print start_date self.pool.get('account.analytic.line').copy(cr, uid, analytic_line.id, {'date': start_date}) #TODO check month_qty return res
def _maintenance_month_qty(self, cr, uid, ids, prop, unknow_none, context={}): result = {} for line in self.browse(cr, uid, ids, context=context): if line.maintenance_start_date and line.maintenance_end_date: result[ line.id] = self._get_maintenance_month_qty_from_start_end( cr, uid, DateTime.strptime(line.maintenance_start_date, '%Y-%m-%d'), DateTime.strptime(line.maintenance_end_date, '%Y-%m-%d')) else: result[line.id] = False return result
def _get_end_date_from_start_date(self, cr, uid, start_date, sub_fleet): year = start_date.year anniversary_time = DateTime.strptime(sub_fleet.anniversary_time, '%Y-%m-%d') month = anniversary_time.month day = anniversary_time.days_in_month - fixed_days_before_month_end end = DateTime.DateTime(year, month, day, 0, 0, 0.0) delta = DateTime.RelativeDateDiff(end + RelativeDateTime(days=fixed_days_before_month_end + 1), start_date) maintenance_month_qty = delta.months + delta.years * 12 if maintenance_month_qty < min_maintenance_months: end = DateTime.DateTime(year + 1, month, day, 0, 0, 0.0) return end
def _get_end_date_from_start_date(self, cr, uid, start_date, sub_fleet): year = start_date.year anniversary_time = DateTime.strptime(sub_fleet.anniversary_time, '%Y-%m-%d') month = anniversary_time.month day = anniversary_time.days_in_month - fixed_days_before_month_end end = DateTime.DateTime(year, month, day, 0, 0, 0.0) delta = DateTime.RelativeDateDiff( end + RelativeDateTime(days=fixed_days_before_month_end + 1), start_date) maintenance_month_qty = delta.months + delta.years * 12 if maintenance_month_qty < min_maintenance_months: end = DateTime.DateTime(year + 1, month, day, 0, 0, 0.0) return end
def create_analytic_lines(self, cr, uid, ids, context={}): res = super(account_move_line, self).create_analytic_lines(cr, uid, ids, context) matched_invoice_line_ids = [] for move_line in self.browse(cr, uid, ids, context): if move_line.analytic_lines and len( move_line.analytic_lines ) == 1 and move_line.product_id.is_maintenance and move_line.invoice: print "native analytic line creation" print move_line analytic_line = move_line.analytic_lines[ 0] #we assume their is only one analytic line for a maintenance product print analytic_line for invoice_line in move_line.invoice.invoice_line: if invoice_line.id not in matched_invoice_line_ids: #we take care of not matching invoice line twice if invoice_line.product_id and invoice_line.product_id.is_maintenance \ and invoice_line.product_id.id == analytic_line.product_id.id and analytic_line.amount == invoice_line.price_subtotal: matched_invoice_line_ids.append(invoice_line.id) month_qty = int(invoice_line.maintenance_month_qty) splitted_amount = invoice_line.quantity / invoice_line.maintenance_month_qty amount = float(analytic_line.amount) / float( invoice_line.maintenance_month_qty) start_date = DateTime.strptime( invoice_line.maintenance_start_date, '%Y-%m-%d') self.pool.get('account.analytic.line').write( cr, uid, analytic_line.id, { 'invoice_line_id': invoice_line.id, 'date': start_date, 'unit_amount': splitted_amount, 'amount': amount }) for i in range(1, month_qty): start_date += DateTime.RelativeDateTime( months=1) print start_date self.pool.get('account.analytic.line').copy( cr, uid, analytic_line.id, {'date': start_date }) #TODO check month_qty return res
def maintenance_qty_change(self, cr, uid, ids, maintenance_product_qty=False, maintenance_month_qty=False, maintenance_start_date=False, maintenance_end_date=False, is_maintenance=False, fleet_id=False): result = {} if not is_maintenance: return result result['value'] = {} warning_messages = "" if maintenance_start_date: start = DateTime.strptime(maintenance_start_date, '%Y-%m-%d') if start.day != fixed_month_init_day: warning_messages += "- Start date should should ideally start at day %s of the month; corrected to day %s\n" % ( fixed_month_init_day, fixed_month_init_day) start = DateTime.DateTime(start.year, start.month, fixed_month_init_day) result['value'].update( {'maintenance_start_date': start.strftime('%Y-%m-%d')}) #return result if maintenance_end_date: end = DateTime.strptime(maintenance_end_date, '%Y-%m-%d') en_date_check = end + DateTime.RelativeDateTime( days=fixed_days_before_month_end + 1) if end.month == en_date_check.month or en_date_check.day != 1: warning_messages += "- End date should should end %s days before the end of the month! It has been reset to the correct value.\n" % fixed_days_before_month_end day = end.days_in_month - fixed_days_before_month_end end = DateTime.DateTime(end.year, end.month, day, 0, 0, 0.0) result['value'].update( {'maintenance_end_date': end.strftime('%Y-%m-%d')}) if maintenance_start_date and maintenance_end_date: if end < start: warning_messages += "- End date should be AFTER Start date!\n" day = start.days_in_month - fixed_days_before_month_end #then we set the minimal end date end = DateTime.DateTime(start.year, start.month, day, 0, 0, 0.0) result['value'].update( {'maintenance_end_date': end.strftime('%Y-%m-%d')}) maintenance_month_qty = self._get_maintenance_month_qty_from_start_end( cr, uid, start, end) result['value'].update( {'maintenance_month_qty': maintenance_month_qty}) if maintenance_month_qty < min_maintenance_months: warning_messages += "- we usually try to sell %s months at least!\n" % min_maintenance_months if fleet_id: fleet = self.pool.get('stock.location').browse( cr, uid, fleet_id) theoretic_end = self._get_end_date_from_start_date( cr, uid, start, fleet) if theoretic_end.year != end.year or theoretic_end.month != end.month or theoretic_end.day != end.day: warning_messages += "- Theoretic Maintenance End Date was: %s !\n" % theoretic_end.strftime( '%Y-%m-%d') if maintenance_product_qty and maintenance_month_qty: #only set the default fleet at init result['value'].update({ 'product_uom_qty': maintenance_product_qty * maintenance_month_qty }) result['value'].update({ 'product_uos_qty': maintenance_product_qty * maintenance_month_qty }) # TODO * product_obj.uos_coeff if len(warning_messages) > 1: result['warning'] = { 'title': 'Maintenance Dates Warning', 'message': warning_messages } return result