# -*- encoding: utf-8 -*- ############################################################################## # # Point Of Sale - Change Payment module for Odoo # Copyright (C) 2015-Today GRAP (http://www.grap.coop) # @author Sylvain LE GAL (https://twitter.com/legalsylvain) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## #from openerp.osv import fields #from openerp.osv.osv import except_osv from openerp.exceptions import ValidationError from openerp import models, api, fields from openerp.tools.translate import _ class PosSwitchJournalWizard(models.TransientModel): _name = 'pos.switch.journal.wizard' # Default Section def _default_statement_line_id(self): return self._context.get('active_id') # Column Section statement_line_id = fields.Many2one( comodel_name='account.bank.statement.line', string='Statement', required=True, readonly=True, default=_default_statement_line_id) old_journal_id = fields.Many2one( comodel_name='account.journal', string='Old Journal', required=True, readonly=True) available_journal_ids = fields.Many2many( comodel_name='account.journal', compute='_compute_available_journal_ids') new_journal_id = fields.Many2one( comodel_name='account.journal', string='New Journal', domain="[('id', 'in', available_journal_ids)]") amount = fields.Float(string='Amount', readonly=True) new_statement_id = fields.Many2one() # Compute Section @api.one @api.depends('statement_line_id') def _compute_available_journal_ids(self): res = [] for statement in self.statement_line_id.pos_statement_id\ .session_id.statement_ids: res.append(statement.journal_id.id) self.available_journal_ids = res # selection='_get_new_statement_id', string='New Journal', # required=True), # @api.model # def _get_new_statement_id(self, cr, uid, context=None): # absl_obj = self.pool['account.bank.statement.line'] # abs_obj = self.pool['account.bank.statement'] # if context.get('active_model', False) != 'account.bank.statement.line': # return True # absl = absl_obj.browse( # cr, uid, context.get('active_id'), context=context) # abs_ids = [ # x.id for x in absl.pos_statement_id.session_id.statement_ids] # res = abs_obj.read( # cr, uid, abs_ids, ['id', 'journal_id'], context=context) # res = [( # r['id'], r['journal_id'][1]) # for r in res if r['id'] != absl.statement_id.id] # return res # _columns = { # } # View Section # @api.model # def default_get(self, fields): # statement_line_obj = self.env['account.bank.statement.line'] # res = super(PosSwitchJournalWizard, self).default_get(fields) # statement_line = statement_line_obj.browse( # self._context.get('active_id')) # self.statement_line_id = statement_line.id # res.update({ ## 'statement_line_id': statement_line.id, # 'old_journal_id': statement_line.journal_id.id, # 'amount': statement_line.amount, # }) # return res # Action section @api.one def button_switch_journal(self): # if self.statement_line_id.pos_statement_id: self.statement_line_id.pos_statement_id._allow_change_payments() # TODO : FIXME when upstream is fixed. # We do 2 write, one in the old statement, one in the new, with # 'amount' value each time to recompute all the functional fields # of the Account Bank Statements # self.statement_line_id.with_context(change_pos_payment=True).write({ # 'amount': 0, # }) # self.statement_line_id.with_context(change_pos_payment=True).write({ # 'amount': self.statement_line_id.amount, # 'statement_id': self.new_statement_id.id, # }) # amount = absl.amount # ctx = context.copy() # ctx['change_pos_payment'] = True # absl_obj.write(cr, uid, [absl.id], { # 'amount': 0, # }, context=ctx) # # Change statement of the statement line # absl_obj.write(cr, uid, [absl.id], { # 'amount': amount, # 'statement_id': int(psjw.new_statement_id), # }, context=ctx) return { 'type': 'ir.actions.client', 'tag': 'reload', }