| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -57,8 +57,7 @@ class AccountAssetCategory(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    journal_id = fields.Many2one('account.journal', string='Journal', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                 required=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    company_id = fields.Many2one('res.company', string='Company', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                 required=True, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                 default=lambda self: self.env.company) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                 required=True, default=lambda self: self.env.company) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    method = fields.Selection( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        [('linear', 'Linear'), ('degressive', 'Degressive')], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        string='Computation Method', required=True, default='linear', | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -201,7 +200,7 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if asset.state in ['open', 'close']: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                raise UserError( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    _('You cannot delete a document is in %s state.') % ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        asset.state,)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    asset.state,)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for depreciation_line in asset.depreciation_line_ids: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if depreciation_line.move_id: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    raise UserError(_( | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -267,16 +266,16 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if self.method_period % 12 != 0: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            date = datetime.strptime(str(self.date), '%Y-%m-%d') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            month_days = \ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                calendar.monthrange(date.year, date.month)[1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            calendar.monthrange(date.year, date.month)[1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            days = month_days - date.day + 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            amount = ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                             amount_to_depr / self.method_number) / month_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                 amount_to_depr / self.method_number) / month_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            days = (self.company_id.compute_fiscalyear_dates( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                depreciation_date)[ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                        'date_to'] - depreciation_date).days + 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            amount = ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                             amount_to_depr / self.method_number) / total_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                 amount_to_depr / self.method_number) / total_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            elif self.method == 'degressive': | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                amount = residual_amount * self.method_progress_factor | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if self.prorata: | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -284,16 +283,16 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        if self.method_period % 12 != 0: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            date = datetime.strptime(str(self.date), '%Y-%m-%d') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            month_days = \ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                calendar.monthrange(date.year, date.month)[1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            calendar.monthrange(date.year, date.month)[1] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            days = month_days - date.day + 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            amount = ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                             residual_amount * self.method_progress_factor) / month_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                 residual_amount * self.method_progress_factor) / month_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            days = (self.company_id.compute_fiscalyear_dates( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                depreciation_date)[ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                        'date_to'] - depreciation_date).days + 1 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            amount = ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                             residual_amount * self.method_progress_factor) / total_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                 residual_amount * self.method_progress_factor) / total_days * days | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return amount | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _compute_board_undone_dotation_nb(self, depreciation_date, total_days): | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -396,7 +395,7 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    'name': (self.code or '') + '/' + str(sequence), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    'remaining_value': residual_amount, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    'depreciated_value': self.value - ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                            self.salvage_value + residual_amount), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                self.salvage_value + residual_amount), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    'depreciation_date': depreciation_date.strftime(DF), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                commands.append((0, False, vals)) | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -437,8 +436,6 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                                                 fields)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            asset.message_post(subject=_('Asset created'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                               tracking_value_ids=tracking_value_ids) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if self.value_residual == 0.0: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.write({'state': 'close'}) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _get_disposal_moves(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        move_ids = [] | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -479,9 +476,8 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    tracked_fields, old_values) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if changes: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    asset.message_post(subject=_( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        'Asset sold or disposed. Accounting entry awaiting ' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        'for validation.'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        tracking_value_ids=tracking_value_ids) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        'Asset sold or disposed. Accounting entry awaiting for validation.'), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                       tracking_value_ids=tracking_value_ids) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                move_ids += asset.depreciation_line_ids[-1].create_move( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    post_move=False) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -489,7 +485,6 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def set_to_close(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        move_ids = self._get_disposal_moves() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.write({'state': 'close'}) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if move_ids: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            name = _('Disposal Move') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            view_mode = 'form' | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -504,6 +499,8 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                'target': 'current', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                'res_id': move_ids[0], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # Fallback, as if we just clicked on the smartbutton | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return self.open_entries() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def set_to_draft(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.write({'state': 'draft'}) | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -533,15 +530,7 @@ class AccountAssetAsset(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _check_prorata(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if self.prorata and self.method_time != 'number': | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            raise ValidationError(_( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                'Prorata temporis can be applied only for time method "number ' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                'of depreciations".')) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @api.constrains('active', 'state') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _check_active(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for record in self: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if not record.active and record.state not in ['draft', 'close']: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                raise UserError( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    "You cannot archive a record in a running state.") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                'Prorata temporis can be applied only for time method "number of depreciations".')) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    @api.onchange('category_id') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def onchange_category_id(self): | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -633,8 +622,7 @@ class AccountAssetDepreciationLine(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                     required=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    depreciation_date = fields.Date('Depreciation Date', index=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    move_id = fields.Many2one('account.move', string='Depreciation Entry') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    move_check = fields.Boolean(compute='_get_move_check', string='Linked', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                store=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    move_check = fields.Boolean(compute='_get_move_check', string='Linked', store=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    move_posted_check = fields.Boolean(compute='_get_move_posted_check', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                       string='Posted', store=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -664,7 +652,7 @@ class AccountAssetDepreciationLine(models.Model): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            amount = current_currency.with_context( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                date=depreciation_date).compute(line.amount, company_currency) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            asset_name = line.asset_id.name + ' (%s/%s)' % ( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                line.sequence, len(line.asset_id.depreciation_line_ids)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            line.sequence, len(line.asset_id.depreciation_line_ids)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            partner = self.env['res.partner']._find_accounting_partner( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                line.asset_id.partner_id) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            move_line_1 = { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |