コード例 #1
0
 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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
ファイル: sale.py プロジェクト: dxyuniesky/openerp-extra-6.1
 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
コード例 #5
0
ファイル: sale.py プロジェクト: dxyuniesky/openerp-extra-6.1
    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
コード例 #6
0
 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
コード例 #7
0
 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
コード例 #8
0
 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
コード例 #9
0
 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
コード例 #10
0
    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
コード例 #11
0
    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