diff --git a/__init__.py b/__init__.py index a466ab6..10c548c 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,4 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -from . import models \ No newline at end of file +from . import models +from . import wizard \ No newline at end of file diff --git a/wizard/__init__.py b/wizard/__init__.py new file mode 100644 index 0000000..e14586d --- /dev/null +++ b/wizard/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import sale_make_invoice_advance \ No newline at end of file diff --git a/wizard/sale_make_invoice_advance.py b/wizard/sale_make_invoice_advance.py new file mode 100644 index 0000000..31ebacb --- /dev/null +++ b/wizard/sale_make_invoice_advance.py @@ -0,0 +1,145 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import time + +from odoo import api, fields, models, _ +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError + + +class SaleAdvancePaymentInv(models.TransientModel): + _inherit = "sale.advance.payment.inv" + + @api.multi + def _create_invoice(self, order, so_line, amount): + print("---- _create_invoice ----") + return = super(SaleAdvancePaymentInv, self)._create_invoice(order, so_line, amount) + # inv_obj = self.env['account.invoice'] + # ir_property_obj = self.env['ir.property'] + + # account_id = False + # if self.product_id.id: + # account_id = self.product_id.property_account_income_id.id or self.product_id.categ_id.property_account_income_categ_id.id + # if not account_id: + # inc_acc = ir_property_obj.get('property_account_income_categ_id', 'product.category') + # account_id = order.fiscal_position_id.map_account(inc_acc).id if inc_acc else False + # if not account_id: + # raise UserError( + # _('There is no income account defined for this product: "%s". You may have to install a chart of account from Accounting app, settings menu.') % + # (self.product_id.name,)) + + # if self.amount <= 0.00: + # raise UserError(_('The value of the down payment amount must be positive.')) + # context = {'lang': order.partner_id.lang} + # if self.advance_payment_method == 'percentage': + # amount = order.amount_untaxed * self.amount / 100 + # name = _("Down payment of %s%%") % (self.amount,) + # else: + # amount = self.amount + # name = _('Down Payment') + # del context + # taxes = self.product_id.taxes_id.filtered(lambda r: not order.company_id or r.company_id == order.company_id) + # if order.fiscal_position_id and taxes: + # tax_ids = order.fiscal_position_id.map_tax(taxes, self.product_id, order.partner_shipping_id).ids + # else: + # tax_ids = taxes.ids + + # invoice = inv_obj.create({ + # 'name': order.client_order_ref or order.name, + # 'origin': order.name, + # 'type': 'out_invoice', + # 'reference': False, + # 'account_id': order.partner_id.property_account_receivable_id.id, + # 'partner_id': order.partner_invoice_id.id, + # 'partner_shipping_id': order.partner_shipping_id.id, + # 'invoice_line_ids': [(0, 0, { + # 'name': name, + # 'origin': order.name, + # 'account_id': account_id, + # 'price_unit': amount, + # 'quantity': 1.0, + # 'discount': 0.0, + # 'uom_id': self.product_id.uom_id.id, + # 'product_id': self.product_id.id, + # 'sale_line_ids': [(6, 0, [so_line.id])], + # 'invoice_line_tax_ids': [(6, 0, tax_ids)], + # 'analytic_tag_ids': [(6, 0, so_line.analytic_tag_ids.ids)], + # 'account_analytic_id': order.analytic_account_id.id or False, + # })], + # 'currency_id': order.pricelist_id.currency_id.id, + # 'payment_term_id': order.payment_term_id.id, + # 'fiscal_position_id': order.fiscal_position_id.id or order.partner_id.property_account_position_id.id, + # 'team_id': order.team_id.id, + # 'user_id': order.user_id.id, + # 'comment': order.note, + # }) + # invoice.compute_taxes() + # invoice.message_post_with_view('mail.message_origin_link', + # values={'self': invoice, 'origin': order}, + # subtype_id=self.env.ref('mail.mt_note').id) + # return invoice + + @api.multi + def create_invoices(self): + print("---- create_invoices ----") + return = super(SaleAdvancePaymentInv, self).create_invoices() + # sale_orders = self.env['sale.order'].browse(self._context.get('active_ids', [])) + + # if self.advance_payment_method == 'delivered': + # sale_orders.action_invoice_create() + # elif self.advance_payment_method == 'all': + # sale_orders.action_invoice_create(final=True) + # else: + # # Create deposit product if necessary + # if not self.product_id: + # vals = self._prepare_deposit_product() + # self.product_id = self.env['product.product'].create(vals) + # self.env['ir.config_parameter'].sudo().set_param('sale.default_deposit_product_id', self.product_id.id) + + # sale_line_obj = self.env['sale.order.line'] + # for order in sale_orders: + # if self.advance_payment_method == 'percentage': + # amount = order.amount_untaxed * self.amount / 100 + # else: + # amount = self.amount + # if self.product_id.invoice_policy != 'order': + # raise UserError(_('The product used to invoice a down payment should have an invoice policy set to "Ordered quantities". Please update your deposit product to be able to create a deposit invoice.')) + # if self.product_id.type != 'service': + # raise UserError(_("The product used to invoice a down payment should be of type 'Service'. Please use another product or update this product.")) + # taxes = self.product_id.taxes_id.filtered(lambda r: not order.company_id or r.company_id == order.company_id) + # if order.fiscal_position_id and taxes: + # tax_ids = order.fiscal_position_id.map_tax(taxes, self.product_id, order.partner_shipping_id).ids + # else: + # tax_ids = taxes.ids + # context = {'lang': order.partner_id.lang} + # analytic_tag_ids = [] + # for line in order.order_line: + # analytic_tag_ids = [(4, analytic_tag.id, None) for analytic_tag in line.analytic_tag_ids] + # so_line = sale_line_obj.create({ + # 'name': _('Advance: %s') % (time.strftime('%m %Y'),), + # 'price_unit': amount, + # 'product_uom_qty': 0.0, + # 'order_id': order.id, + # 'discount': 0.0, + # 'product_uom': self.product_id.uom_id.id, + # 'product_id': self.product_id.id, + # 'analytic_tag_ids': analytic_tag_ids, + # 'tax_id': [(6, 0, tax_ids)], + # 'is_downpayment': True, + # }) + # del context + # self._create_invoice(order, so_line, amount) + # if self._context.get('open_invoices', False): + # return sale_orders.action_view_invoice() + # return {'type': 'ir.actions.act_window_close'} + + # def _prepare_deposit_product(self): + # return { + # 'name': 'Down payment', + # 'type': 'service', + # 'invoice_policy': 'order', + # 'property_account_income_id': self.deposit_account_id.id, + # 'taxes_id': [(6, 0, self.deposit_taxes_id.ids)], + # 'company_id': False, + # }