Merge branch 'master' of https://github.com/odoo/odoo
[odoo/odoo.git] / addons / sale / test / edi_sale_order.yml
1 -
2   I create a draft Sale Order
3 -
4   !record {model: sale.order, id: sale_order_edi_1}:
5     partner_id: base.res_partner_2
6     partner_invoice_id: base.res_partner_address_3
7     partner_shipping_id: base.res_partner_address_3
8     pricelist_id: 1
9     order_line:
10       - product_id: product.product_product_3
11         product_uom_qty: 1.0
12         product_uom: 1
13         price_unit: 150.0
14         name: 'PC Assemble SC234'
15     order_line:
16       - product_id: product.product_product_5
17         product_uom_qty: 10.0
18         product_uom: 1
19         price_unit: 200.0
20         name: 'PC Assemble + Custom (PC on Demand)'
21 -
22   I confirm the sale order
23 -
24   !workflow {model: sale.order, ref: sale_order_edi_1, action: order_confirm}
25 -
26   Then I export the sale order via EDI
27 -
28   !python {model: edi.edi}: |
29     import json
30     sale_order = self.pool.get('sale.order')
31     so = sale_order.browse(cr, uid, ref("sale_order_edi_1"))
32     edi_doc = self.generate_edi(cr, uid, [so])
33     assert isinstance(json.loads(edi_doc)[0], dict), 'EDI doc should be a JSON dict' 
34 -
35   "Then I import a sample EDI document of a purchase order (v7.0)"
36 -
37   !python {model: edi.edi}: |
38     from openerp.tools import float_compare
39     sale_order_pool = self.pool.get('sale.order')
40     edi_document = {
41         "__id": "purchase:5af12v70-dv70-1v70-bv70-701a04e25v70.purchase_order_test",
42         "__module": "purchase",
43         "__model": "purchase.order",
44         "__import_module": "sale",
45         "__import_model": "sale.order",
46         "__version": [7,0,0],
47         "name": "PO00011",
48         "date_order": "2011-09-12",
49         "currency": {
50                 "__id": "base:5af12v70-dv70-1v70-bv70-701a04e25v70.EUR",
51                 "__module": "base",
52                 "__model": "res.currency",
53                 "code": "EUR",
54                 "symbol": "€",
55         },
56         "company_id": ["base:5af12v70-dv70-1v70-bv70-701a04e25v70.main_company", "Client S.A."],
57         "company_address": {
58                 "__id": "base:5af12v70-dv70-1v70-bv70-701a04e25v70.some_address",
59                 "__module": "base",
60                 "__model": "res.partner",
61                 "phone": "(+32).81.81.37.00",
62                 "street": "Chaussee de Namur 40",
63                 "city": "Gerompont",
64                 "zip": "1367",
65                 "country_id": ["base:5af12v70-dv70-1v70-bv70-701a04e25v70.be", "Belgium"],
66                 "bank_ids": [
67                     ["base:5af12v70-dv70-1v70-bv70-701a04e25v70.res_partner_bank-adaWadsadasdDJzGbp","Another bank: 032465700-156700"]
68                 ],
69         },
70         "partner_id": ["purchase:5af12v70-dv70-1v70-bv70-701a04e25v70.res_partner_test20", "jones white"],
71         "order_line": [{
72                 "__id": "purchase:5af12v70-dv70-1v70-bv70-701a04e25v70.purchase_order_line-AlhsVDZGoKvJ",
73                 "__module": "purchase",
74                 "__model": "purchase.order.line",
75                 "__import_module": "sale",
76                 "__import_model": "sale.order.line",
77                 "name": "PC Assemble SC234",
78                 "price_unit": 150.0,
79                 "product_id": ["product:5af12v70-dv70-1v70-bv70-701a04e25v70.product_product_3", "[PCSC234] PC Assemble SC234"],
80                 "product_qty": 1.0,
81                 "product_uom": ["product:5af12v70-dv70-1v70-bv70-701a04e25v70.product_uom_unit", "Unit"],
82         },
83         {
84                 "__id": "purchase:5af12v70-dv70-1v70-bv70-701a04e25v70.purchase_order_line-Alsads33e",
85                 "__module": "purchase",
86                 "__model": "purchase.order.line",
87                 "__import_module": "sale",
88                 "__import_model": "sale.order.line",
89                 "name": "PC on Demand",
90                 "price_unit": 100.0,
91                 "product_id": ["product:5af12v70-dv70-1v70-bv70-701a04e25v70.product_product_5", "[PC-DEM] PC on Demand"],
92                 "product_qty": 2.0,
93                 "product_uom": ["product:5af12v70-dv70-1v70-bv70-701a04e25v70.product_uom_unit", "Unit"],
94         }],
95     }
96     new_sale_order_id = sale_order_pool.edi_import(cr, uid, edi_document, context=context)
97     assert new_sale_order_id,  'Sale order import failed'
98     order_new = sale_order_pool.browse(cr, uid, new_sale_order_id)
99
100     # check bank info on partner
101     assert order_new.partner_id.customer, "Imported partner should be a customer, as we just imported the document as a sale order"
102     assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner"
103     bank_info = order_new.partner_id.bank_ids[0]
104     assert bank_info.acc_number == "Another bank: 032465700-156700", 'Expected "Another bank: 032465700-156700", got %s' % bank_info.acc_number
105
106     assert order_new.pricelist_id.name == 'Public Pricelist' , "Public Price list was not automatically assigned"
107     assert float_compare(order_new.amount_total, 350, precision_digits=2) == 0, "Amount total is wrong"
108     assert float_compare(order_new.amount_untaxed, 350, precision_digits=2) == 0, "Untaxed amount is wrong"
109     assert len(order_new.order_line) == 2, "Sale order lines mismatch"
110     for sale_line in order_new.order_line:
111         if sale_line.name == 'PC Assemble SC234':
112             assert sale_line.product_uom.name == "Unit" , "uom is not same"
113             assert float_compare(sale_line.price_unit, 150 , precision_digits=2) == 0, "unit price is not same, got %s, expected 150"%(sale_line.price_unit,)
114             assert sale_line.product_uom_qty == 1 , "product qty is not same"
115         elif sale_line.name == 'PC on Demand':
116             assert sale_line.product_uom.name == "Unit" , "uom is not same"
117             assert float_compare(sale_line.price_unit, 100, precision_digits=2) == 0, "unit price is not same, got %s, expected 100"%(sale_line.price_unit,)
118             assert sale_line.product_uom_qty == 2 , "product qty is not same"
119         else:
120             raise AssertionError('unknown order line: %s' % sale_line)
121 -
122   "Then I import a sample EDI document of a purchase order (v6.1 - to test backwards compatibility)"
123 -
124   !python {model: edi.edi}: |
125     from openerp.tools import float_compare
126     sale_order_pool = self.pool.get('sale.order')
127     edi_document = {
128         "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_test",
129         "__module": "purchase",
130         "__model": "purchase.order",
131         "__import_module": "sale",
132         "__import_model": "sale.order",
133         "__version": [6,1,0],
134         "name": "PO00011-v61",
135         "date_order": "2011-09-12",
136         "currency": {
137                 "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.EUR",
138                 "__module": "base",
139                 "__model": "res.currency",
140                 "code": "EUR",
141                 "symbol": "€",
142         },
143         "company_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.main_company", "Client S.A."],
144         "company_address": {
145                 "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.some_address",
146                 "__module": "base",
147                 "__model": "res.partner.address",
148                 "phone": "(+32).81.81.37.00",
149                 "street": "Chaussee de Namur 40",
150                 "city": "Gerompont",
151                 "zip": "1367",
152                 "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"],
153                 "bank_ids": [
154                     ["base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_bank-adaWadsadasdDJzGbp","Ladies bank: 032465789-156113"]
155                 ],
156         },
157         "partner_id": ["purchase:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_test20", "jones white"],
158         "partner_address": {
159                 "__id": "base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_address_7wdsjasdjh",
160                 "__module": "base",
161                 "__model": "res.partner.address",
162                 "phone": "(+32).81.81.37.00",
163                 "street": "Chaussee de Namur 40",
164                 "city": "Gerompont",
165                 "zip": "1367",
166                 "country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"],
167         },
168         "order_line": [{
169                 "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_line-AlhsVDZGoKvJ",
170                 "__module": "purchase",
171                 "__model": "purchase.order.line",
172                 "__import_module": "sale",
173                 "__import_model": "sale.order.line",
174                 "name": "Basic PC",
175                 "price_unit": 150.0,
176                 "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc1", "[PC1] Basic PC"],
177                 "product_qty": 1.0,
178                 "product_uom": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_uom_unit", "PCE"],
179         },
180         {
181                 "__id": "purchase:5af1272e-dd26-11e0-b65e-701a04e25543.purchase_order_line-Alsads33e",
182                 "__module": "purchase",
183                 "__model": "purchase.order.line",
184                 "__import_module": "sale",
185                 "__import_model": "sale.order.line",
186                 "name": "Medium PC",
187                 "price_unit": 100.0,
188                 "product_id": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_product_pc3", "[PC3] Medium PC"],
189                 "product_qty": 2.0,
190                 "product_uom": ["product:5af1272e-dd26-11e0-b65e-701a04e25543.product_uom_unit", "PCE"],
191         }],
192     }
193     new_sale_order_id = sale_order_pool.edi_import(cr, uid, edi_document, context=context)
194     assert new_sale_order_id,  'Sale order import failed'
195     order_new = sale_order_pool.browse(cr, uid, new_sale_order_id)
196
197     # check bank info on partner
198     assert order_new.partner_id.customer, "Imported partner should be a customer, as we just imported the document as a sale order"
199     assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner"
200     bank_info = order_new.partner_id.bank_ids[0]
201     assert bank_info.acc_number == "Ladies bank: 032465789-156113", 'Expected "Ladies bank: 032465789-156113", got %s' % bank_info.acc_number
202
203     assert order_new.pricelist_id.name == 'Public Pricelist' , "Public Price list was not automatically assigned"
204     assert float_compare(order_new.amount_total, 350, precision_digits=2) == 0, "Amount total is wrong"
205     assert float_compare(order_new.amount_untaxed, 350, precision_digits=2) == 0, "Untaxed amount is wrong"
206     assert len(order_new.order_line) == 2, "Sale order lines mismatch"
207     for sale_line in order_new.order_line:
208         if sale_line.name == 'Basic PC':
209             assert sale_line.product_uom.name == "PCE" , "uom is not same"
210             assert float_compare(sale_line.price_unit, 150, precision_digits=2) == 0, "unit price is not same, got %s, expected 150"%(sale_line.price_unit,)
211             assert sale_line.product_uom_qty == 1 , "product qty is not same"
212         elif sale_line.name == 'Medium PC':
213             assert sale_line.product_uom.name == "PCE" , "uom is not same"
214             assert float_compare(sale_line.price_unit, 100 , precision_digits=2) == 0, "unit price is not same, got %s, expected 100"%(sale_line.price_unit,)
215             assert sale_line.product_uom_qty == 2 , "product qty is not same"
216         else:
217             raise AssertionError('unknown order line: %s' % sale_line)