浏览代码

[ADD] complete sale

Gogs 7 年之前
父节点
当前提交
b65d928d7d
共有 9 个文件被更改,包括 120 次插入19 次删除
  1. 2 0
      __init__.py
  2. 2 1
      __openerp__.py
  3. 4 0
      models/account_invoice.py
  4. 15 15
      models/account_payment_term.py
  5. 53 2
      models/account_voucher.py
  6. 8 0
      models/eiru_pos.py
  7. 1 1
      src/App.vue
  8. 25 0
      src/store/actions.js
  9. 10 0
      workflows/eiru_pos_workflow.xml

+ 2 - 0
__init__.py

@@ -1,8 +1,10 @@
 # -*- coding: utf-8 -*
+from models import account_invoice
 from models import account_journal
 from models import account_payment_term
 from models import account_period
 from models import account_voucher
+from models import eiru_pos
 from models import product_template
 from models import res_company
 from models import res_currency

+ 2 - 1
__openerp__.py

@@ -6,6 +6,7 @@
     'version': '0.1',
     'depends': ['base', 'sale', 'account'],
     'data': [
-        'templates.xml'
+        'templates.xml',
+        'workflows/eiru_pos_workflow.xml'
     ]
 }

+ 4 - 0
models/account_invoice.py

@@ -0,0 +1,4 @@
+from openerp import api, fields, models
+
+class AccountInvoice(models.Model):
+    _inherit = 'account.invoice'

+ 15 - 15
models/account_payment_term.py

@@ -8,22 +8,22 @@ class AccountPaymentTerm(models.Model):
         domain = [('active', '=', True)]
         terms = []
 
-    for term in self.env['account.payment.term'].search(domain):
-            lines = []
+        for term in self.env['account.payment.term'].search(domain):
+                lines = []
 
-            for line in term.line_ids:
-                lines.append({
-                    'id': line.id,
-                    'display_name': line.display_name,
-                    'days': line.days,
-                    'value_amount': line.value_amount
-                })
+                for line in term.line_ids:
+                    lines.append({
+                        'id': line.id,
+                        'display_name': line.display_name,
+                        'days': line.days,
+                        'value_amount': line.value_amount
+                    })
 
-            terms.append({
-                'id': term.id,
-                'name': term.name,
-                'display_name': term.display_name,
-                'lines': lines
-            })
+                terms.append({
+                    'id': term.id,
+                    'name': term.name,
+                    'display_name': term.display_name,
+                    'lines': lines
+                })
 
         return terms

+ 53 - 2
models/account_voucher.py

@@ -1,8 +1,59 @@
 from openerp import api, fields, models
+from openerp.exceptions import except_orm
 
 class AccountVoucher(models.Model):
     _inherit = 'account.voucher' 
 
     @api.model
-    def perform_payment(self):
-        pass
+    def create_from_pos(self, values):
+
+        # Activity 1: Create Sale Order
+        sale_order_model = self.env['sale.order']
+
+        # sale_order_line_values = [
+        #     [0, False, { 
+        #         'product_id': int(item['id']), 
+        #         'product_uom_qty': float(item['qty']), 
+        #         'price_unit': float(item['price']) 
+        #     }] for item in values['cart_items']]
+
+        # sale_order_values = {
+        #     'partner_id': int(values['customer_id']),
+        #     'order_line': sale_order_line_values,
+        #     'picking_policy': 'direct'
+        # }
+
+        # sale_order_id = sale_order_model.create(sale_order_values)
+        sale_order_id = 26
+
+        # Activity 2: Confirm Sale Order
+        sale_order = sale_order_model.browse([sale_order_id])
+        # sale_order.write({ 'state': 'manual' })
+
+        # for sale_order_line in sale_order.order_line:
+        #     sale_order_line.write({ 'state': 'confirmed' })
+
+        # Activity 3: Create Invoice
+        account_id = False
+        decimal_precision = self.env['decimal.precision'].precision_get('Product Price')
+        account_invoice_model = self.env['account.invoice']
+
+        for sale_order_line in sale_order.order_line:
+            account_id = sale_order_line.product_id.property_account_income.id
+
+            if not account_id:
+                account_id = sale_order_line.product_id.categ_id.property_account_income_categ.id
+
+                if not account_id:
+                    raise except_orm('Error', 'Es necesario denifir una cuenta de ingresos para este producto')
+
+            uos_quantity = sale_order_line.product_uos_qty or 0.0 if sale_order_line.product_uos else sale_order_line.product_uom_qty
+            uos_id = sale_order_line.product_uos.id if sale_order_line.product_uos else sale_order_line.product_uom.id
+            fiscal_position = sale_order_line.order_id.fiscal_position or False
+
+            subtotal = round(sale_order_line.price_unit * sale_order_line.product_uom_qty / uos_quantity, decimal_precision)
+
+        
+        
+
+        

+ 8 - 0
models/eiru_pos.py

@@ -0,0 +1,8 @@
+from openerp import api, fields, models
+
+class EiruPos(models.AbstractModel):
+    _name = 'eiru.pos'
+
+    @api.v8
+    def action_create_order(self, values):
+        print values

+ 1 - 1
src/App.vue

@@ -1,6 +1,6 @@
 <template lang="pug">
     .pos
-        form-wizard(title="" subtitle="" finishButtonText="Finalizar" color="#7c7bad" nextButtonText="Continuar" backButtonText="Volver" transition="fade")
+        form-wizard(title="" subtitle="" finishButtonText="Finalizar" color="#7c7bad" nextButtonText="Continuar" backButtonText="Volver" @on-complete="completeSale()")
             tab-content(title="Qué productos necesita?" :before-change="checkCart")
                 cart-step
             tab-content(title="Quién es el cliente?" :before-change="checkCustomer")

+ 25 - 0
src/store/actions.js

@@ -22,7 +22,32 @@ const actions = {
         })
     },
     completeSale({ getters }) {
+        return new Promise((resolve, reject) => {
+            let AccountVoucher = new openerp.web.Model('account.voucher')
 
+            AccountVoucher.call('create_from_pos', [
+                {
+                    customer_id: getters.selectedCustomer.id,
+                    cart_items: getters.cartItems.map(item => {
+                        return {
+                            id: item.id,
+                            qty: item.qty,
+                            price: item.list_price
+                        }
+                    }),
+                    cart_total: getters.total,
+                    amount_paid: getters.amountPaid
+                }
+            ], {
+                context: new openerp.web.CompoundContext()
+            }).then(response => {
+                console.log(response)
+
+                resolve(response)
+            }).fail(error => {
+                reject(error)
+            })
+        })
     }
 }
 

+ 10 - 0
workflows/eiru_pos_workflow.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+        <record id="eiru_pos_wkf" model="workflow">
+            <field name="name">eiru.pos.wkf</field>
+            <field name="osv">eiru.pos</field>
+            <field name="on_create">True</field>
+        </record>
+    </data>
+</openerp>