Pārlūkot izejas kodu

[FIX] invoice creation issues

robert 6 gadi atpakaļ
vecāks
revīzija
4a0178c34a

+ 17 - 49
controllers/helpers/__init__.py

@@ -8,7 +8,7 @@ from account_voucher import create_account_voucher
 from http_response import make_gzip_response
 from product_pricelist import get_pricelist_id
 from product_template import get_products
-from purchase_order import (get_purchase_orders, get_purchase_order, create_purchase_order, confirm_purchase_order, force_assign_picking, done_picking)
+from purchase_order import (get_purchase_orders, get_purchase_order, create_purchase_order, confirm_purchase_order, done_purchase_order, force_assign_picking, done_picking)
 from res_bank_cheque_type import get_cheque_types
 from res_bank_payments_type import get_bank_payment_types
 from res_bank import get_banks
@@ -100,18 +100,25 @@ def process_data(data=None):
 
         return order.id
 
-    def paying_order(order_id, supplier_invoice_number=None, supplier_id=None, cart_items=None, date_now=None, payment_term_id=None):
-        invoice = None
+    def paying_order(order_id, supplier_invoice_number=None, date_now=None, payment_term_id=None):
+        order = get_purchase_order(order_id)
 
-        if order_id:
-            order = get_purchase_order(order_id)
-            invoice = order.invoice_ids
+        lines = [{
+            'name': l.name,
+            'id': l.product_id.id,
+            'quantity': l.product_qty,
+            'price': l.price_unit
+        } for l in order.order_line]
 
-        if not invoice:
-            invoice = create_invoice(supplier_id, cart_items, currency_id, payment_term_id, supplier_invoice_number)
+        invoice = create_invoice(order.partner_id.id, lines, order.currency_id.id, payment_term_id, supplier_invoice_number)
 
         invoice_ids = invoice.mapped(lambda x: x.id)
 
+        order.write({
+            'invoice_ids': [[4, invoice_ids, False]],
+            'invoiced': True
+        })
+
         prepare_invoice(invoice_ids, currency_id, date_now)
         move_lines = create_invoice_move_lines(invoice_ids, payment, date_now)
         account_move = create_account_move(invoice_ids, move_lines)
@@ -164,52 +171,13 @@ def process_data(data=None):
         if not order_id:
             return
 
-        paying_order(order_id, supplier_invoice_number, supplier_id, cart_items, date_now, payment_term_id)
+        paying_order(order_id, supplier_invoice_number, date_now, payment_term_id)
+        done_purchase_order(order_id)
 
     if mode == 'picking':
         order_id = data.get('orderId')
         complete_order(order_id)
 
-
-    # prepare_invoice(invoice_ids, currency_id, date_now)
-    # move_lines = create_invoice_move_lines(invoice_ids, payment, date_now)
-    # account_move = create_account_move(invoice_ids, move_lines)
-    #
-    # validate_invoice(invoice_ids, mode)
-    #
-    # account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
-    # close_invoice(invoice_ids)
-    #
-    # statement_lines = create_bank_statement_lines(account_voucher.id)
-    # create_bank_statement(account_voucher.id, statement_lines, date_now)
-
-    # invoice = None
-    #
-    # if mode == 'purchase':
-    #     purchase_order = create_purchase_order(supplier_id, cart_items, date_now, currency_id, pricelist_id, payment_term_id)
-    #     confirm_purchase_order(purchase_order.id)
-    #
-    #     invoice = purchase_order.invoice_ids
-    #     invoice.write({
-    #         'supplier_invoice_number': supplier_invoice_number
-    #     })
-    # else:
-    #     invoice = create_invoice(supplier_id, cart_items, currency_id, payment_term_id, supplier_invoice_number)
-    #
-    # invoice_ids = invoice.mapped(lambda x: x.id)
-    #
-    # prepare_invoice(invoice_ids, currency_id, date_now)
-    # move_lines = create_invoice_move_lines(invoice_ids, payment, date_now)
-    # account_move = create_account_move(invoice_ids, move_lines)
-    #
-    # validate_invoice(invoice_ids, mode)
-    #
-    # account_voucher = create_account_voucher(account_move.id, journal_id, currency_id, payment)
-    # close_invoice(invoice_ids)
-    #
-    # statement_lines = create_bank_statement_lines(account_voucher.id)
-    # create_bank_statement(account_voucher.id, statement_lines, date_now)
-
     return {
         'status': 'ok'
     }

+ 8 - 3
controllers/helpers/account_invoice.py

@@ -1,12 +1,15 @@
 # -*- coding: utf-8 -*-
 from openerp.http import request as r
+from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
+from dateutil.parser import parse
+from dateutil.relativedelta import relativedelta as rd
 
 
 def create_invoice(supplier_id, cart_items, currency_id, payment_term_id=None, supplier_invoice_number=None):
     partner = r.env['res.partner'].browse(supplier_id)
     journal = r.env['account.journal'].search([('type', 'in', ['purchase']), ('company_id', '=', partner.company_id.id)])
 
-    return r.env['account.invoice'].create({
+    values = {
         'name': '/',
         'partner_id': partner.id,
         'invoice_line': [[0, False, {
@@ -21,7 +24,9 @@ def create_invoice(supplier_id, cart_items, currency_id, payment_term_id=None, s
         'payment_term': payment_term_id,
         'supplier_invoice_number': supplier_invoice_number,
         'type': 'in_invoice'
-    })
+    }
+
+    return r.env['account.invoice'].create(values)
 
 
 def prepare_invoice(invoice_ids, currency_id, date_today):
@@ -34,7 +39,7 @@ def prepare_invoice(invoice_ids, currency_id, date_today):
     invoice.write({
         'currency_id': currency_id,
         'date_invoice': date_today,
-        'date_due': date_due.strftime(DATE_FORMAT),
+        'date_due': date_due.strftime(DEFAULT_SERVER_DATE_FORMAT),
         'state': 'open'
     })
 

+ 10 - 3
controllers/helpers/purchase_order.py

@@ -31,13 +31,13 @@ def get_purchase_orders():
                 {
                     'id': l.product_id.id,
                     'name': l.product_id.display_name,
-                    'listPrice': l.product_id.list_price,
+                    'listPrice': l.price_unit,
                     'quantity': l.product_qty,
-                    'price': l.product_id.list_price,
+                    'price': l.price_unit,
                     'discount': 0
                 } for l in po.order_line
             ]
-        } for po in r.env['purchase.order'].search(domain)
+        } for po in r.env['purchase.order'].search(domain, order='id')
     ]
 
 
@@ -89,6 +89,13 @@ def confirm_purchase_order(purchase_order_id):
     return po.action_purchase_confirm()
 
 
+def done_purchase_order(purchase_order_id):
+    po = r.env['purchase.order'].browse(purchase_order_id)
+    po.write({
+        'state': 'done'
+    })
+
+
 def force_assign_picking(purchase_order_id):
     po = r.env['purchase.order'].browse(purchase_order_id)
 

+ 0 - 1
controllers/main.py

@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
 from openerp import http
-from openerp.http import request as r
 from helpers import get_data, process_data
 import logging
 

+ 0 - 8
src/store/app.js

@@ -167,14 +167,6 @@ const actions = {
         if (['purchase', 'expense', 'payment'].includes(mode)) {
             data = {
                 ...data,
-                items: getters.cartItems.map(item => {
-                    return {
-                        id: item.id,
-                        name: item.name,
-                        quantity: item.quantity,
-                        price: item.price
-                    }
-                }),
                 total: getters.cartTotal,
                 purchaseOrderId: (getters.selectedPurchaseOrder && getters.selectedPurchaseOrder.id) || null,
                 paymentTermId: getters.selectedPaymentTerm.id,