diff --git a/account_banking_payment_export/model/__init__.py b/account_banking_payment_export/model/__init__.py deleted file mode 100644 index 74ab85c8d..000000000 --- a/account_banking_payment_export/model/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- -from . import account_move_line -from . import account_payment -from . import bank_payment_manual -from . import payment_mode -from . import payment_mode_type -from . import payment_order_create diff --git a/account_banking_payment_export/model/account_move_line.py b/account_banking_payment_export/model/account_move_line.py deleted file mode 100644 index 6d7fad550..000000000 --- a/account_banking_payment_export/model/account_move_line.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2004-2014 OpenERP S.A. (http://www.openerp.com/) -# (C) 2014 Akretion (http://www.akretion.com/) -# -# 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 orm, fields -from operator import itemgetter - - -# All the code below aims at fixing one small issue in _to_pay_search() -# But _to_pay_search() is the search function of the field 'amount_to_pay' -# which is a field.function and these functions are not inheritable in OpenERP. -# So we have to inherit the field 'amount_to_pay' and duplicate the related -# functions -# If the patch that I proposed in this bug report -# https://bugs.launchpad.net/openobject-addons/+bug/1275478 -# is integrated in addons/account_payment, then we will be able to remove this -# file. -- Alexis de Lattre -class account_move_line(orm.Model): - _inherit = 'account.move.line' - - def amount_to_pay(self, cr, uid, ids, name, arg=None, context=None): - """ Return the amount still to pay regarding all the payemnt orders - (excepting cancelled orders)""" - if not ids: - return {} - cr.execute("""SELECT ml.id, - CASE WHEN ml.amount_currency < 0 - THEN - ml.amount_currency - ELSE ml.credit - END - - (SELECT coalesce(sum(amount_currency),0) - FROM payment_line pl - INNER JOIN payment_order po - ON (pl.order_id = po.id) - WHERE move_line_id = ml.id - AND po.state != 'cancel') AS amount - FROM account_move_line ml - WHERE id IN %s""", (tuple(ids),)) - r = dict(cr.fetchall()) - return r - - def _to_pay_search(self, cr, uid, obj, name, args, context=None): - if not args: - return [] - line_obj = self.pool.get('account.move.line') - query = line_obj._query_get(cr, uid, context={}) - where = ' and '.join(map(lambda x: '''(SELECT - CASE WHEN l.amount_currency < 0 - THEN - l.amount_currency - ELSE l.credit - END - coalesce(sum(pl.amount_currency), 0) - FROM payment_line pl - INNER JOIN payment_order po ON (pl.order_id = po.id) - WHERE move_line_id = l.id - AND po.state != 'cancel' - ) %(operator)s %%s ''' % {'operator': x[1]}, args)) - sql_args = tuple(map(itemgetter(2), args)) - - cr.execute( - ('''\ - SELECT id - FROM account_move_line l - WHERE account_id IN (select id - FROM account_account - WHERE type in %s AND active) - AND reconcile_id IS null - AND credit > 0 - AND ''' + where + ' and ' + query - ), (('payable', 'receivable'), ) + sql_args - ) - # The patch we have compared to the original function in - # addons/account_payment is just above : - # original code : type = 'payable' - # fixed code : type in ('payable', 'receivable') - - res = cr.fetchall() - if not res: - return [('id', '=', '0')] - return [('id', 'in', map(lambda x:x[0], res))] - - _columns = { - 'amount_to_pay': fields.function( - amount_to_pay, - type='float', - string='Amount to pay', - fnct_search=_to_pay_search - ), - } diff --git a/account_banking_payment_export/model/account_payment.py b/account_banking_payment_export/model/account_payment.py deleted file mode 100644 index bc720771a..000000000 --- a/account_banking_payment_export/model/account_payment.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009 EduSense BV (). -# (C) 2011 - 2013 Therp BV (). -# -# All other contributions are (C) by their respective contributors -# -# All Rights Reserved -# -# 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 orm, fields -from openerp.tools.translate import _ -from openerp import netsvc - - -class payment_order(orm.Model): - _inherit = 'payment.order' - - _columns = { - 'payment_order_type': fields.selection( - [('payment', 'Payment'), ('debit', 'Direct debit')], - 'Payment order type', required=True, - readonly=True, states={'draft': [('readonly', False)]}, - ), - 'mode_type': fields.related( - 'mode', 'type', type='many2one', relation='payment.mode.type', - string='Payment Type'), - } - - _defaults = { - 'payment_order_type': 'payment', - } - - def launch_wizard(self, cr, uid, ids, context=None): - """ - Search for a wizard to launch according to the type. - If type is manual. just confirm the order. - Previously (pre-v6) in account_payment/wizard/wizard_pay.py - """ - if context is None: - context = {} - result = {} - orders = self.browse(cr, uid, ids, context) - order = orders[0] - # check if a wizard is defined for the first order - if order.mode.type and order.mode.type.ir_model_id: - context['active_ids'] = ids - wizard_model = order.mode.type.ir_model_id.model - wizard_obj = self.pool.get(wizard_model) - wizard_id = wizard_obj.create(cr, uid, {}, context) - result = { - 'name': wizard_obj._description or _('Payment Order Export'), - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': wizard_model, - 'domain': [], - 'context': context, - 'type': 'ir.actions.act_window', - 'target': 'new', - 'res_id': wizard_id, - 'nodestroy': True, - } - else: - # should all be manual orders without type or wizard model - for order in orders[1:]: - if order.mode.type and order.mode.type.ir_model_id: - raise orm.except_orm( - _('Error'), - _('You can only combine payment orders of the same ' - 'type') - ) - # process manual payments - wf_service = netsvc.LocalService('workflow') - for order_id in ids: - wf_service.trg_validate( - uid, 'payment.order', order_id, 'done', cr - ) - return result diff --git a/account_banking_payment_export/model/bank_payment_manual.py b/account_banking_payment_export/model/bank_payment_manual.py deleted file mode 100644 index cd17f4dd1..000000000 --- a/account_banking_payment_export/model/bank_payment_manual.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009 EduSense BV (). -# (C) 2011 - 2013 Therp BV (). -# -# All other contributions are (C) by their respective contributors -# -# All Rights Reserved -# -# 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 . -# -############################################################################## - -''' -This module contains a single "wizard" for confirming manual -bank transfers. -''' - -from openerp.osv import orm, fields -from openerp import netsvc - - -class payment_manual(orm.TransientModel): - _name = 'payment.manual' - _description = 'Send payment order(s) manually' - - _columns = { - 'payment_order_ids': fields.many2many( - 'payment.order', - 'wiz_manual_payorders_rel', - 'wizard_id', - 'payment_order_id', - 'Payment orders', - readonly=True - ), - } - - def create(self, cr, uid, vals, context=None): - payment_order_ids = context.get('active_ids', []) - vals.update({ - 'payment_order_ids': [[6, 0, payment_order_ids]], - }) - return super(payment_manual, self).create( - cr, uid, vals, context=context - ) - - def button_ok(self, cr, uid, ids, context=None): - wf_service = netsvc.LocalService('workflow') - for wiz in self.browse(cr, uid, ids, context=context): - for order_id in wiz.payment_order_ids: - wf_service.trg_validate( - uid, 'payment.order', order_id.id, 'done', cr) - return {'type': 'ir.actions.act_window_close'} diff --git a/account_banking_payment_export/model/payment_mode.py b/account_banking_payment_export/model/payment_mode.py deleted file mode 100644 index e5cf3b452..000000000 --- a/account_banking_payment_export/model/payment_mode.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009 EduSense BV (). -# (C) 2011 - 2013 Therp BV (). -# -# All other contributions are (C) by their respective contributors -# -# All Rights Reserved -# -# 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 orm, fields - - -class payment_mode(orm.Model): - ''' Restoring the payment type from version 5, - used to select the export wizard (if any) ''' - _inherit = "payment.mode" - - def suitable_bank_types(self, cr, uid, payment_mode_id=None, context=None): - """ Reinstates functional code for suitable bank type filtering. - Current code in account_payment is disfunctional. - """ - res = [] - payment_mode = self.browse( - cr, uid, payment_mode_id, context) - if (payment_mode - and payment_mode.type - and payment_mode.type.suitable_bank_types): - res = [t.code for t in payment_mode.type.suitable_bank_types] - return res - - _columns = { - 'type': fields.many2one( - 'payment.mode.type', 'Payment type', - required=True, - help='Select the Payment Type for the Payment Mode.' - ), - 'payment_order_type': fields.related( - 'type', 'payment_order_type', readonly=True, type='selection', - selection=[('payment', 'Payment'), ('debit', 'Direct debit')], - string="Payment Order Type"), - 'active': fields.boolean('Active'), - } - - _defaults = { - 'active': True, - } diff --git a/account_banking_payment_export/model/payment_mode_type.py b/account_banking_payment_export/model/payment_mode_type.py deleted file mode 100644 index 5514595ec..000000000 --- a/account_banking_payment_export/model/payment_mode_type.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009 EduSense BV (). -# (C) 2011 - 2013 Therp BV (). -# -# All other contributions are (C) by their respective contributors -# -# All Rights Reserved -# -# 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 orm, fields - - -class payment_mode_type(orm.Model): - _name = 'payment.mode.type' - _description = 'Payment Mode Type' - _columns = { - 'name': fields.char( - 'Name', size=64, required=True, - help='Payment Type' - ), - 'code': fields.char( - 'Code', size=64, required=True, - help='Specify the Code for Payment Type' - ), - 'suitable_bank_types': fields.many2many( - 'res.partner.bank.type', - 'bank_type_payment_type_rel', - 'pay_type_id', 'bank_type_id', - 'Suitable bank types', required=True), - 'ir_model_id': fields.many2one( - 'ir.model', 'Payment wizard', - help=('Select the Payment Wizard for payments of this type. ' - 'Leave empty for manual processing'), - domain=[('osv_memory', '=', True)], - ), - 'payment_order_type': fields.selection( - [('payment', 'Payment'), ('debit', 'Direct debit')], - 'Payment order type', required=True, - ), - 'active': fields.boolean('Active'), - } - - _defaults = { - 'payment_order_type': 'payment', - 'active': True, - } - - def _auto_init(self, cr, context=None): - r = super(payment_mode_type, self)._auto_init(cr, context=context) - # migrate xmlid from manual_bank_transfer to avoid dependency on - # account_banking - cr.execute("""UPDATE ir_model_data - SET module='account_banking_payment_export' - WHERE module='account_banking' AND - name='manual_bank_tranfer' AND - model='payment.mode.type'""") - return r diff --git a/account_banking_payment_export/model/payment_order_create.py b/account_banking_payment_export/model/payment_order_create.py deleted file mode 100644 index 910673da7..000000000 --- a/account_banking_payment_export/model/payment_order_create.py +++ /dev/null @@ -1,201 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Copyright (C) 2009 EduSense BV (). -# (C) 2011 - 2013 Therp BV (). -# -# All other contributions are (C) by their respective contributors -# -# All Rights Reserved -# -# 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 orm, fields -from openerp.tools.translate import _ - - -class payment_order_create(orm.TransientModel): - _inherit = 'payment.order.create' - - def extend_payment_order_domain( - self, cr, uid, payment_order, domain, context=None): - if payment_order.payment_order_type == 'payment': - domain += [ - ('account_id.type', 'in', ('payable', 'receivable')), - ('amount_to_pay', '>', 0) - ] - return True - - def search_entries(self, cr, uid, ids, context=None): - """ - This method taken from account_payment module. - We adapt the domain based on the payment_order_type - """ - line_obj = self.pool.get('account.move.line') - mod_obj = self.pool.get('ir.model.data') - if context is None: - context = {} - data = self.read(cr, uid, ids, ['duedate'], context=context)[0] - search_due_date = data['duedate'] - - # start account_banking_payment - payment = self.pool.get('payment.order').browse( - cr, uid, context['active_id'], context=context) - # Search for move line to pay: - domain = [ - ('move_id.state', '=', 'posted'), - ('reconcile_id', '=', False), - ('company_id', '=', payment.mode.company_id.id), - ] - self.extend_payment_order_domain( - cr, uid, payment, domain, context=context) - # end account_direct_debit - - domain = domain + [ - '|', ('date_maturity', '<=', search_due_date), - ('date_maturity', '=', False) - ] - line_ids = line_obj.search(cr, uid, domain, context=context) - context.update({'line_ids': line_ids}) - model_data_ids = mod_obj.search( - cr, uid, [ - ('model', '=', 'ir.ui.view'), - ('name', '=', 'view_create_payment_order_lines')], - context=context) - resource_id = mod_obj.read( - cr, uid, model_data_ids, fields=['res_id'], - context=context)[0]['res_id'] - return { - 'name': _('Entry Lines'), - 'context': context, - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'payment.order.create', - 'views': [(resource_id, 'form')], - 'type': 'ir.actions.act_window', - 'target': 'new', - } - - def _prepare_payment_line(self, cr, uid, payment, line, context=None): - '''This function is designed to be inherited - The resulting dict is passed to the create method of payment.line''' - _today = fields.date.context_today(self, cr, uid, context=context) - if payment.date_prefered == "now": - # no payment date => immediate payment - date_to_pay = False - elif payment.date_prefered == 'due': - # account_banking - # date_to_pay = line.date_maturity - date_to_pay = ( - line.date_maturity - if line.date_maturity and line.date_maturity > _today - else False) - # end account banking - elif payment.date_prefered == 'fixed': - # account_banking - # date_to_pay = payment.date_scheduled - date_to_pay = ( - payment.date_scheduled - if payment.date_scheduled and payment.date_scheduled > _today - else False) - # end account banking - - # account_banking - state = 'normal' - communication = line.ref or '-' - if line.invoice: - if line.invoice.type in ('in_invoice', 'in_refund'): - if line.invoice.reference_type == 'structured': - state = 'structured' - communication = line.invoice.reference - else: - if line.invoice.reference: - communication = line.invoice.reference - elif line.invoice.supplier_invoice_number: - communication = line.invoice.supplier_invoice_number - else: - # Make sure that the communication includes the - # customer invoice number (in the case of debit order) - communication = line.invoice.number.replace('/', '') - state = 'structured' - - # support debit orders when enabled - if (payment.payment_order_type == 'debit' - and 'amount_to_receive' in line): - amount_currency = line.amount_to_receive - else: - amount_currency = line.amount_to_pay - # end account_banking - - # account banking - # t = None - # line2bank = line_obj.line2bank(cr, uid, line_ids, t, context) - line2bank = self.pool['account.move.line'].line2bank( - cr, uid, [line.id], payment.mode.id, context) - # end account banking - - res = { - 'move_line_id': line.id, - 'amount_currency': amount_currency, - 'bank_id': line2bank.get(line.id), - 'order_id': payment.id, - 'partner_id': line.partner_id and line.partner_id.id or False, - # account banking - # 'communication': line.ref or '/' - 'communication': communication, - 'state': state, - # end account banking - 'date': date_to_pay, - 'currency': (line.invoice and line.invoice.currency_id.id - or line.journal_id.currency.id - or line.journal_id.company_id.currency_id.id), - } - return res - - def create_payment(self, cr, uid, ids, context=None): - ''' - This method is a slightly modified version of the existing method on - this model in account_payment. - - pass the payment mode to line2bank() - - allow invoices to create influence on the payment process: not only - 'Free' references are allowed, but others as well - - check date_to_pay is not in the past. - ''' - if context is None: - context = {} - data = self.read(cr, uid, ids, [], context=context)[0] - line_ids = data['entries'] - if not line_ids: - return {'type': 'ir.actions.act_window_close'} - - payment = self.pool['payment.order'].browse( - cr, uid, context['active_id'], context=context) - # Populate the current payment with new lines: - for line in self.pool['account.move.line'].browse( - cr, uid, line_ids, context=context): - vals = self._prepare_payment_line( - cr, uid, payment, line, context=context) - self.pool['payment.line'].create(cr, uid, vals, context=context) - # Force reload of payment order view as a workaround for lp:1155525 - return { - 'name': _('Payment Orders'), - 'context': context, - 'view_type': 'form', - 'view_mode': 'form,tree', - 'res_model': 'payment.order', - 'res_id': context['active_id'], - 'type': 'ir.actions.act_window', - } diff --git a/account_payment_sale/model/__init__.py b/account_payment_sale/model/__init__.py deleted file mode 100644 index 079ae1b71..000000000 --- a/account_payment_sale/model/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Account Payment Sale module for OpenERP -# Copyright (C) 2014 Akretion (http://www.akretion.com) -# @author Alexis de Lattre -# -# 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 . import sale diff --git a/account_payment_sale/model/sale.py b/account_payment_sale/model/sale.py deleted file mode 100644 index 5951f96af..000000000 --- a/account_payment_sale/model/sale.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Account Payment Sale module for OpenERP -# Copyright (C) 2014 Akretion (http://www.akretion.com) -# @author Alexis de Lattre -# -# 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 orm, fields - - -class sale_order(orm.Model): - _inherit = "sale.order" - - _columns = { - 'payment_mode_id': fields.many2one( - 'payment.mode', 'Payment Mode'), - } - - def onchange_partner_id(self, cr, uid, ids, part, context=None): - res = super(sale_order, self).onchange_partner_id( - cr, uid, ids, part, context=context) - if part: - partner = self.pool['res.partner'].browse( - cr, uid, part, context=context) - res['value']['payment_mode_id'] = \ - partner.customer_payment_mode.id or False, - else: - res['value']['payment_mode_id'] = False - return res - - def _prepare_invoice(self, cr, uid, order, lines, context=None): - """Copy bank partner from sale order to invoice""" - invoice_vals = super(sale_order, self)._prepare_invoice( - cr, uid, order, lines, context=context) - invoice_vals.update({ - 'payment_mode_id': order.payment_mode_id.id or False, - 'partner_bank_id': order.payment_mode_id and - order.payment_mode_id.bank_id.id or False, - }) - return invoice_vals