Jelajahi Sumber

[FIX] expenses

robert 5 tahun lalu
induk
melakukan
7f75b2e9e2

+ 116 - 22
controllers/helpers/__init__.py

@@ -8,7 +8,16 @@ 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, done_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, 
+    create_picking,
+    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
@@ -84,7 +93,15 @@ def process_data(data=None):
     if not data:
         return {}
 
-    def drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id=None, user_id=None):
+    def drafting_order(vals={}):
+        currency_id = vals.get('currency_id', None)
+        supplier_id = vals.get('supplier_id', None)
+        cart_items = vals.get(cart_items, [])
+        date_now = vals.get('date_now', None)
+        payment_term_id = vals.get('payment_term_id', None)
+        warehouse_id = vals.get('warehouse_id', None)
+        user_id = vals.get('user_id', None)
+    
         pricelist_id = get_pricelist_id(currency_id)
 
         order = create_purchase_order(supplier_id, cart_items, date_now, currency_id, pricelist_id, payment_term_id, warehouse_id, user_id)
@@ -100,24 +117,53 @@ def process_data(data=None):
 
         return order.id
 
-    def paying_order(order_id, supplier_invoice_number=None, date_now=None, payment_term_id=None, user_id=None, mode=None):
-        order = get_purchase_order(order_id)
-
-        lines = [{
-            'name': l.name,
-            'id': l.product_id.id,
-            'quantity': l.product_qty,
-            'price': l.price_unit
-        } for l in order.order_line]
-
-        invoice = create_invoice(order.name, order.partner_id.id, lines, order.currency_id.id, payment_term_id, supplier_invoice_number, user_id)
+    def paying_order(vals={}):
+        order_id = vals.get('order_id', None)
+        cart_items = vals.get('cart_items', [])
+        currency_id = vals.get('currency_id', None)
+        supplier_id = vals.get('supplier_id', None)
+        supplier_invoice_number = vals.get('supplier_invoice_number', None)
+        date_now = vals.get('date_now', None)
+        payment_term_id = vals.get('payment_term_id', None)
+        user_id = vals.get('user_id', None)
+        mode = vals.get('mode', None)
+
+        order_name = None
+        order_lines = None
+
+        if order_id:
+            order = get_purchase_order(order_id)
+            
+            order_name = order.name
+            order_lines = [
+                {
+                    'name': l.name,
+                    'id': l.product_id.id,
+                    'quantity': l.product_qty,
+                    'price': l.price_unit
+                } for l in order.order_line
+            ]
+            supplier_id = order.partner_id.id
+            currency_id = order.currency_id.id
+        else:
+            order_lines = [
+                {
+                    'name': item.get('name'),
+                    'id': item.get('id'),
+                    'quantity': item.get('quantity'),
+                    'price': item.get('price')
+                } for item in cart_items
+            ]
+
+        invoice = create_invoice(order_name, supplier_id, order_lines, currency_id, payment_term_id, supplier_invoice_number, user_id)
 
         invoice_ids = invoice.mapped(lambda x: x.id)
 
-        order.write({
-            'invoice_ids': [[4, invoice_ids, False]],
-            'invoiced': True
-        })
+        if order_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)
@@ -129,8 +175,14 @@ def process_data(data=None):
         close_invoice(invoice_ids)
 
         bank_statement = invoice.create_bank_statement(date_now, user_id, account_voucher, None)
+
+        if order_id and len(order.picking_ids) == 0:
+            create_picking(order_id)
+
         return bank_statement.id
 
+    
+
     def complete_order(order_id):
         if not order_id:
             return None
@@ -150,14 +202,49 @@ def process_data(data=None):
     user_id = data.get('userId', None)
     payment = float(data.get('payment', 0.0))
 
-    if mode not in ('product_picking', 'payment', 'product_taking'):
-        order_id, currency_id = drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id, user_id)
+    if mode == 'purchase':
+        order_id, currency_id = drafting_order({
+            'currency_id': currency_id,
+            'supplier_id': supplier_id,
+            'cart_items': cart_items,
+            'date_now': date_now,
+            'payment_term_id': payment_term_id,
+            'warehouse_id': warehouse_id,
+            'user_id': user_id
+        })
         confirm_purchase_order(order_id)
-        paying_order(order_id, supplier_invoice_number, date_now, payment_term_id, user_id, mode)
+        paying_order({
+            'order_id': order_id,
+            'supplier_invoice_number': supplier_invoice_number,
+            'date_now': date_now,
+            'payment_term_id': payment_term_id,
+            'user_id': user_id,
+            'mode': mode
+        })
         done_purchase_order(order_id)
 
+    if mode == 'expense':
+        paying_order({
+            'supplier_id': supplier_id,
+            'cart_items': cart_items,
+            'currency_id': currency_id,
+            'supplier_invoice_number': supplier_invoice_number,
+            'date_now': date_now,
+            'payment_term_id': payment_term_id,
+            'user_id': user_id,
+            'mode': mode
+        })
+
     if mode == 'product_picking':
-        order_id, currency_id = drafting_order(currency_id, supplier_id, cart_items, date_now, payment_term_id, warehouse_id, user_id)
+        order_id, currency_id = drafting_order({
+            'currency_id': currency_id,
+            'supplier_id': supplier_id,
+            'cart_items': cart_items,
+            'date_now': date_now,
+            'payment_term_id': payment_term_id,
+            'warehouse_id': warehouse_id,
+            'user_id': user_id
+        })
         confirm_purchase_order(order_id)
 
     if mode == 'payment':
@@ -166,7 +253,14 @@ def process_data(data=None):
         if not order_id:
             return
 
-        paying_order(order_id, supplier_invoice_number, date_now, payment_term_id, user_id, mode)
+        paying_order({
+            'order_id': order_id,
+            'supplier_invoice_number': supplier_invoice_number,
+            'date_now': date_now,
+            'payment_term_id': payment_term_id,
+            'user_id': user_id,
+            'mode': mode
+        })
         done_purchase_order(order_id)
 
     if mode == 'product_taking':

+ 9 - 2
controllers/helpers/purchase_order.py

@@ -65,7 +65,7 @@ def create_purchase_order(supplier_id, cart_items, date_order, currency_id, pric
         }]]
 
     if warehouse_id == None:
-        warehouse_id = r.env['stock.warehouse'].browse([1])
+        warehouse_id = r.env['stock.warehouse'].browse([1]).id
 
     values = {
         'name': '/',
@@ -84,13 +84,20 @@ def create_purchase_order(supplier_id, cart_items, date_order, currency_id, pric
     return r.env['purchase.order'].create(values)
 
 
+def create_picking(purchase_order_id):
+    po = r.env['purchase.order'].browse(purchase_order_id)
+    picking_id = po.action_picking_create()
+
+    return picking_id
+
+
 def confirm_purchase_order(purchase_order_id):
     po = r.env['purchase.order'].browse(purchase_order_id)
     po.write({
         'state': 'approved'
     })
 
-    return po.action_purchase_confirm()
+    # return po.action_purchase_confirm()
 
 
 def done_purchase_order(purchase_order_id):

+ 4 - 4
controllers/helpers/stock_picking.py

@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
-from openerp.http import request as r
+from openerp.http import request as req
 
 
 def get_pickings():
-    purchase_orders = r.env['purchase.order'].search([('from_pop', '=', True)])
+    purchase_orders = req.env['purchase.order'].search([('from_pop', '=', True)])
     purchase_orders = purchase_orders.mapped(lambda x: x.name)
 
     domain = [
@@ -41,10 +41,10 @@ def get_pickings():
                 'mobile': sp.partner_id.mobile or None,
                 'email': sp.partner_id.email or None
             }
-        } for sp in r.env['stock.picking'].search(domain)
+        } for sp in req.env['stock.picking'].search(domain)
     ]
 
 
 def confirm_picking(stock_picking_id):
-    stock_picking = r.env['stock.picking'].browse(stock_picking_id)
+    stock_picking = req.env['stock.picking'].browse(stock_picking_id)
     stock_picking.do_transfer()

+ 8 - 3
controllers/helpers/stock_warehouse.py

@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-from openerp.http import request as r
+from openerp.http import request as req
 
 
 def get_warehouses():
@@ -11,7 +11,7 @@ def get_warehouses():
                 'id': w.lot_stock_id.id,
                 'name': w.lot_stock_id.display_name
             }
-        } for w in r.env.user.store_id.warehouse_ids
+        } for w in req.env.user.store_id.warehouse_ids
     ]
 
 
@@ -19,4 +19,9 @@ def get_location_id(warehouse_id):
     if not warehouse_id:
         return None
 
-    return r.env.user.store_id.warehouse_ids.filtered(lambda x: x.id == warehouse_id).lot_stock_id.id
+    store_id = req.env.user.store_id
+
+    if len(store_id) == 0:
+        store_id = req.env['res.store'].search([])[0]
+
+    return store_id.warehouse_ids.filtered(lambda x: x.id == warehouse_id).lot_stock_id.id