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