-
- [[ repeatIn(objects,'o') ]][[ setLang(o.partner_id.lang) ]]
@@ -523,6 +501,5 @@
-
diff --git a/addons/account_invoice_layout/test/account_invoice_layout_report.yml b/addons/account_invoice_layout/test/account_invoice_layout_report.yml
index 91967358a3d..61ca39c654b 100644
--- a/addons/account_invoice_layout/test/account_invoice_layout_report.yml
+++ b/addons/account_invoice_layout/test/account_invoice_layout_report.yml
@@ -1,22 +1,9 @@
--
- In order to Print the Invoice layout report in Normal Mode, we will create a invoice record
--
- !record {model: account.invoice, id: test_invoice_1}:
- currency_id: base.EUR
- company_id: base.main_company
- address_invoice_id: base.res_partner_address_tang
- partner_id: base.res_partner_asus
- state: draft
- type: out_invoice
- account_id: account.a_recv
- name: Test invoice 1
- address_contact_id: base.res_partner_address_tang
-
Print the Invoice layout report in Normal Mode
-
!python {model: account.invoice}: |
import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.account.invoice.layout').create(cr, uid, [ref('test_invoice_1')], {}, {})
+ (data, format) = netsvc.LocalService('report.account.invoice.layout').create(cr, uid, [ref('account.demo_invoice_0')], {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'account_invoice_layout.'+format), 'wb+').write(data)
@@ -25,7 +12,7 @@
-
!python {model: account.invoice}: |
ctx={}
- ctx.update({'model': 'account.invoice','active_ids': [ref('test_invoice_1')]})
+ ctx.update({'model': 'account.invoice','active_ids': [ref('account.demo_invoice_0')]})
data_dict = {'message':ref('account_invoice_layout.demo_message1')}
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_account_invoice_special_msg',wiz_data=data_dict, context=ctx, our_module='account_invoice_layout')
diff --git a/addons/account_invoice_layout/wizard/account_invoice_special_message.xml b/addons/account_invoice_layout/wizard/account_invoice_special_message.xml
index b1cf7357241..d849595bfca 100644
--- a/addons/account_invoice_layout/wizard/account_invoice_special_message.xml
+++ b/addons/account_invoice_layout/wizard/account_invoice_special_message.xml
@@ -2,43 +2,43 @@
-
- Account Invioce Special Message
- account.invoice.special.msg
- form
-
-
-
-
+
+ Account Invioce Special Message
+ account.invoice.special.msg
+ form
+
+
+
+
-
- Invoices with Layout and Message
- ir.actions.act_window
- account.invoice.special.msg
- form
- form
-
- new
-
+
+ Invoices and Message
+ ir.actions.act_window
+ account.invoice.special.msg
+ form
+ form
+
+ new
+
-
-
-
- Account Invioce Special Message
- client_print_multi
-
- action
- account.invoice
-
+
+
+
+ Account Invioce Special Message
+ client_print_multi
+
+ action
+ account.invoice
+
-
\ No newline at end of file
+
diff --git a/addons/account_sequence/account_sequence.xml b/addons/account_sequence/account_sequence.xml
index 6b9e2c94402..ba97025bae7 100644
--- a/addons/account_sequence/account_sequence.xml
+++ b/addons/account_sequence/account_sequence.xml
@@ -70,7 +70,7 @@
-
+
diff --git a/addons/account_voucher/account_voucher.py b/addons/account_voucher/account_voucher.py
index bdb498c8554..6e325a2c87e 100644
--- a/addons/account_voucher/account_voucher.py
+++ b/addons/account_voucher/account_voucher.py
@@ -265,7 +265,7 @@ class account_voucher(osv.osv):
'company_id': fields.related('journal_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
'company_currency': fields.related('company_id','currency_id', type='many2one', relation='res.currency', string='Currency', readonly=True),
'state':fields.selection(
- [('draft','Draft'),
+ [('draft','New'),
('proforma','Pro-forma'),
('posted','Posted'),
('cancel','Cancelled')
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index e44fd264879..a545781b4f2 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -102,7 +102,7 @@
-
+
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 98b242443a4..2c496933a16 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -280,7 +280,7 @@
-
+
@@ -455,7 +455,7 @@
-
+
diff --git a/addons/account_voucher/voucher_sales_purchase_view.xml b/addons/account_voucher/voucher_sales_purchase_view.xml
index 7fe4acbf241..6ed381de209 100644
--- a/addons/account_voucher/voucher_sales_purchase_view.xml
+++ b/addons/account_voucher/voucher_sales_purchase_view.xml
@@ -149,7 +149,7 @@
-
+
@@ -270,7 +270,7 @@
-
+
diff --git a/addons/analytic/analytic.py b/addons/analytic/analytic.py
index d60efd20144..b087a95149e 100644
--- a/addons/analytic/analytic.py
+++ b/addons/analytic/analytic.py
@@ -168,7 +168,7 @@ class account_analytic_account(osv.osv):
'date_start': fields.date('Date Start'),
'date': fields.date('Date End', select=True),
'company_id': fields.many2one('res.company', 'Company', required=False), #not required because we want to allow different companies to use the same chart of account, except for leaf accounts.
- 'state': fields.selection([('draft','Draft'),('open','Open'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Closed'),('template', 'Template')], 'State', required=True,
+ 'state': fields.selection([('draft','New'),('open','Started'), ('pending','Pending'),('cancelled', 'Cancelled'),('close','Closed'),('template', 'Template')], 'State', required=True,
help='* When an account is created its in \'Draft\' state.\
\n* If any associated partner is there, it can be in \'Open\' state.\
\n* If any pending balance is there it can be in \'Pending\'. \
diff --git a/addons/auction/i18n/da.po b/addons/auction/i18n/da.po
new file mode 100644
index 00000000000..17401e2bdaa
--- /dev/null
+++ b/addons/auction/i18n/da.po
@@ -0,0 +1,2294 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-09-23 14:47+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:58+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_report_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_taken
+msgid "Auction taken"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Set to draft"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,partner_id:0
+#: field:auction.lots,seller_id:0
+#: view:report.auction:0
+#: field:report.auction,seller:0
+msgid "Seller"
+msgstr "Sælger"
+
+#. module: auction
+#: field:auction.lots,name:0
+msgid "Title"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.sms.send,text:0
+msgid "SMS Message"
+msgstr "SMS besked"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+#: view:auction.lots.auction.move:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid " "
+msgstr " "
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+msgid "Warning, Erase The Object Adjudication Price and Its Buyer!"
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,statement_id1:0
+msgid "First Bank Statement For Buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid_line,lot_id:0
+#: field:auction.lot.history,lot_id:0
+msgid "Object"
+msgstr ""
+
+#. module: auction
+#: field:report.auction.object.date,obj_num:0
+msgid "# of Objects"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Authors"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+#: report:auction.bids:0
+#: view:auction.lots:0
+#: field:auction.lots,ach_uid:0
+#: field:auction.lots.buyer_map,ach_uid:0
+#: field:auction.lots.make.invoice.buyer,buyer_id:0
+#: field:auction.pay.buy,buyer_id:0
+#: report:buyer.list:0
+#: view:report.auction:0
+#: field:report.auction,buyer:0
+#: report:report.auction.buyer.result:0
+msgid "Buyer"
+msgstr "Køber"
+
+#. module: auction
+#: field:report.auction,object:0
+msgid "No of objects"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,paid_vnd:0
+msgid ""
+"When state of Seller Invoice is 'Paid', this field is selected as True."
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of paid items (based on invoices):"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Border"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.make.invoice,amount:0
+#: field:auction.lots.make.invoice.buyer,amount:0
+msgid "Invoiced Amount"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,name:0
+msgid "Auction object name"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_aie_category
+msgid "aie.category"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit.cost,amount:0
+#: field:auction.pay.buy,amount:0
+#: field:auction.pay.buy,amount2:0
+#: field:auction.pay.buy,amount3:0
+msgid "Amount"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_deposit_border
+#: model:ir.ui.menu,name:auction.menu_auction_deposit_border
+msgid "Deposit border"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Reference"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,state:0
+msgid ""
+"When auction starts the state is 'Draft'.\n"
+" At the end of auction, the state becomes 'Closed'."
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,account_analytic_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,amount3:0
+msgid "Amount For Third Bank Statement"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,lot_num:0
+msgid "List Number"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Date:"
+msgstr "Dato:"
+
+#. module: auction
+#: field:auction.deposit.cost,name:0
+msgid "Cost Name"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+#: field:auction.dates,state:0
+#: view:auction.lots:0
+#: field:auction.lots,state:0
+#: view:report.auction:0
+#: field:report.auction,state:0
+msgid "State"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "First Auction Date"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "January"
+msgstr "Januar"
+
+#. module: auction
+#: help:auction.lot.category,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the auction "
+"lot category without removing it."
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Ref"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,total_price:0
+msgid "Total Price"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Total Adj."
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "SMS - Gateway: clickatell','Bulk SMS send"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,costs:0
+msgid "Deposit cost"
+msgstr ""
+
+#. module: auction
+#: selection:auction.lots,state:0
+#: selection:report.auction,state:0
+#: selection:report.object.encoded,state:0
+msgid "Unsold"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Search Auction deposit"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,lot_num:0
+msgid "List number in depositer inventory"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Items"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax5
+#: field:auction.dates,seller_costs:0
+msgid "Seller Costs"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+#: view:auction.bid_line:0
+#: view:auction.lots:0
+#: field:auction.lots,bid_lines:0
+#: model:ir.actions.report.xml,name:auction.bid_auction
+#: model:ir.ui.menu,name:auction.menu_action_bid_open
+msgid "Bids"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Buyer Map"
+msgstr ""
+
+#. module: auction
+#: field:report.object.encoded,obj_ret:0
+msgid "# obj ret"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_bid
+msgid "Bid Auctions"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,image:0
+msgid "Object Image"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:70
+#, python-format
+msgid "No buyer is set for this lot."
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:578
+#, python-format
+msgid "The Buyer \"%s\" has no Invoice Address."
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Commissions"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_deposit_cost
+msgid "Auction Deposit Cost"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Border Form"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,statement_id:0
+msgid "Bank statement line for given buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.category,aie_categ:0
+msgid "Category"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_view_auction_buyer_map
+msgid "Map buyer username to Partners"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Search Auction Lots"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,net_revenue:0
+msgid "Net Revenue"
+msgstr ""
+
+#. module: auction
+#: field:report.auction.adjudication,state:0
+#: field:report.object.encoded,state:0
+msgid "Status"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_sms_send
+msgid "SMS Send"
+msgstr "SMS sendt"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "August"
+msgstr "August"
+
+#. module: auction
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+#: view:report.auction:0
+#: selection:report.auction,state:0
+msgid "Sold"
+msgstr "Solgt"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "June"
+msgstr "Juni"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63
+#, python-format
+msgid "No Lots belong to this Auction Date"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "October"
+msgstr "Oktober"
+
+#. module: auction
+#: field:auction.bid_line,name:0
+msgid "Bid date"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,acc_expense:0
+msgid "Expense Account"
+msgstr ""
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_wizard_emporte
+msgid "Deliveries Management"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,obj_desc:0
+msgid "Object Description"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,artist2_id:0
+msgid "Artist/Author2"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line1"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_make_invoice_buyer
+msgid "Make Invoice for Buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,gross_revenue:0
+#: field:report.object.encoded,gross_revenue:0
+msgid "Gross revenue"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_pay_buy
+msgid "Pay objects of the buyer"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,auction2:0
+msgid "End date of auction"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "Send SMS"
+msgstr "Send SMS"
+
+#. module: auction
+#: field:auction.lots,name2:0
+msgid "Short Description (2)"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+#: model:ir.ui.menu,name:auction.auction_buyers_menu
+msgid "Buyers"
+msgstr "Købere"
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id4
+msgid "VAT 12%"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Buyer Invoices"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.res_w_buyer
+msgid "Results with buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid_line,price:0
+msgid "Maximum Price"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,auction1:0
+msgid "Start date of auction"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_auction_move
+msgid "Auction Move"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,buyer_costs:0
+msgid "Account tax for buyer"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Next Auction"
+msgstr ""
+
+#. module: auction
+#: view:auction.taken:0
+msgid "Select lots which are Sold"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,statement_id:0
+msgid "Payment"
+msgstr "Betaling"
+
+#. module: auction
+#: code:addons/auction/auction.py:571
+#: code:addons/auction/auction.py:686
+#, python-format
+msgid "The object \"%s\" has no buyer assigned."
+msgstr ""
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Keep until sold"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Last Auction Date"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.tax_seller
+msgid "Seller Costs (12%)"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,paid_vnd:0
+msgid "Seller Paid"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+#: view:report.object.encoded:0
+msgid "Objects statistics"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of sellers:"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,date:0
+#: field:report.object.encoded,date:0
+msgid "Create Date"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+#: selection:report.object.encoded,state:0
+msgid "Invoiced"
+msgstr "Faktureret"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of items taken away:"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction
+#: view:report.auction:0
+msgid "Auction's Summary"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "%)"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Buyer Information"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,gross_revenue:0
+msgid "Buyer Price - Seller Price"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.make.invoice,objects:0
+#: field:auction.lots.make.invoice.buyer,objects:0
+msgid "# of objects"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,lot_est2:0
+msgid "Maximum Estimation"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,buyer_price:0
+msgid "Buyer price"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Bids Details"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,is_ok:0
+msgid "Buyer's payment"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "End of auction"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_catalog_flagey_wizard
+#: model:ir.model,name:auction.model_auction_catalog_flagey
+msgid "Auction Catalog Flagey"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "March"
+msgstr "Marts"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax4
+msgid "Seller Costs1"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,create_uid:0
+#: field:auction.lots,create_uid:0
+msgid "Created by"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of buyers:"
+msgstr "Antal købere"
+
+#. module: auction
+#: field:auction.lots,costs:0
+msgid "Indirect costs"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,seller_costs:0
+msgid "Account tax for seller"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_invoice.py:68
+#: code:addons/auction/wizard/auction_lots_numerotate.py:103
+#: code:addons/auction/wizard/auction_lots_numerotate.py:129
+#, python-format
+msgid "UserError"
+msgstr ""
+
+#. module: auction
+#: model:ir.module.module,shortdesc:auction.module_meta_information
+msgid "Auction Management"
+msgstr "Auktions administration"
+
+#. module: auction
+#: field:auction.dates,journal_seller_id:0
+msgid "Seller Journal"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+#: selection:auction.dates,state:0
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+#: view:report.auction:0
+#: selection:report.auction,state:0
+#: selection:report.auction.adjudication,state:0
+#: selection:report.object.encoded,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,state:0
+msgid ""
+" * The 'Draft' state is used when a object is encoding as a new object. "
+" \n"
+"* The 'Unsold' state is used when object does not sold for long time, user "
+"can also set it as draft state after unsold. \n"
+"* The 'Paid' state is used when user pay for the object \n"
+"* The 'Sold' state is used when user buy the object."
+msgstr ""
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Print"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+#: view:report.auction:0
+msgid "Type"
+msgstr ""
+
+#. module: auction
+#: help:aie.category,child_ids:0
+msgid "children aie category"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,ach_emp:0
+msgid "When state is Taken Away, this field is marked as True"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_taken
+msgid "Gestion emporte"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+#: report:auction.bids:0
+#: view:auction.dates:0
+#: view:auction.lots:0
+#: field:auction.lots,auction_id:0
+#: report:auction.total.rml:0
+#: model:ir.ui.menu,name:auction.auction_menu_root
+#: view:report.auction:0
+msgid "Auction"
+msgstr "Auktion"
+
+#. module: auction
+#: view:auction.lot.category:0
+#: model:ir.ui.menu,name:auction.menu_auction_object_cat
+msgid "Object Categories"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.sms.send,app_id:0
+msgid "API ID"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,name:0
+#: field:auction.bid_line,bid_id:0
+msgid "Bid ID"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Min Estimate:"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "September"
+msgstr "September"
+
+#. module: auction
+#: field:report.auction,net_margin:0
+msgid "Net Margin"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,vnd_lim_net:0
+msgid "Net limit ?"
+msgstr ""
+
+#. module: auction
+#: field:aie.category,child_ids:0
+msgid "unknown"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of commissions:"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid_line,auction:0
+#: field:auction.dates,name:0
+msgid "Auction Name"
+msgstr ""
+
+#. module: auction
+#: field:report.object.encoded,obj_num:0
+msgid "# of Encoded obj."
+msgstr ""
+
+#. module: auction
+#: field:aie.category,parent_id:0
+msgid "Parent aie Category"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction Summary"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "(Keep empty for automatic number)"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:578
+#, python-format
+msgid "No Invoice Address"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.v_huissier
+msgid "Bailiffs Listing"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_numerotate.py:103
+#: code:addons/auction/wizard/auction_lots_numerotate.py:129
+#, python-format
+msgid "This record does not exist !"
+msgstr ""
+
+#. module: auction
+#: field:auction.pay.buy,total:0
+msgid "Total Amount"
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,amount:0
+msgid "Amount For First Bank Statement"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction_object_date
+#: view:report.auction.object.date:0
+msgid "Objects per day"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,author_right:0
+msgid "Account tax for author commission"
+msgstr ""
+
+#. module: auction
+#: model:product.template,name:auction.monproduit_product_template
+msgid "Oeuvres a 21%"
+msgstr ""
+
+#. module: auction
+#: field:report.object.encoded,adj:0
+msgid "Adj."
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.history,name:0
+#: field:report.auction.adjudication,date:0
+msgid "Date"
+msgstr "Dato"
+
+#. module: auction
+#: field:auction.lots,obj_ret:0
+msgid "Price retired"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Extra Costs"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Map "
+msgstr "Kort "
+
+#. module: auction
+#: field:auction.lots,paid_ach:0
+msgid "Buyer Invoice Reconciled"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,date_dep:0
+msgid "Deposit date"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.id_deposit
+msgid "Deposits"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,specific_cost_ids:0
+msgid "Specific Costs"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "To pay ("
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.tax_buyer
+msgid "Buyer Costs (20%)"
+msgstr ""
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_board_auction
+msgid "Dashboard"
+msgstr "Oversigt"
+
+#. module: auction
+#: view:auction.dates:0
+#: model:ir.actions.act_window,name:auction.action_auction_dates_next
+#: model:ir.ui.menu,name:auction.auction_date_menu
+#: model:ir.ui.menu,name:auction.menu_auction_dates_next1
+msgid "Auctions"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Total Adjudications"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_make_invoice
+msgid "Make invoice"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "November"
+msgstr "November"
+
+#. module: auction
+#: view:auction.dates:0
+#: view:auction.lots:0
+msgid "History"
+msgstr ""
+
+#. module: auction
+#: field:aie.category,code:0
+msgid "Code"
+msgstr ""
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid "Nr."
+msgstr "Nr."
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.v_report_barcode_lot
+msgid "Barcode batch"
+msgstr ""
+
+#. module: auction
+#: report:report.auction.buyer.result:0
+msgid "Num"
+msgstr ""
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Cancel"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Buyer's Payment History"
+msgstr ""
+
+#. module: auction
+#: view:auction.artists:0
+#: field:auction.artists,biography:0
+msgid "Biography"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Inventory"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+msgid "Create Invoices For Seller"
+msgstr ""
+
+#. module: auction
+#: field:report.object.encoded,obj_margin:0
+msgid "Net margin"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,lot_local:0
+msgid "Auction Location"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Analytic"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,paid_ach:0
+msgid ""
+"When state of Buyer Invoice is 'Paid', this field is selected as True."
+msgstr ""
+
+#. module: auction
+#: report:bids.lots:0
+#: report:bids.phones.details:0
+msgid "Cat.N"
+msgstr ""
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Decrease limit of 10%"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,adj_total:0
+#: field:report.auction.adjudication,adj_total:0
+msgid "Total Adjudication"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice_buyer
+msgid "Invoice Buyer objects"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "My Auction"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,gross_margin:0
+msgid "(Gross Revenue*100.0)/ Object Price"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,contact_tel:0
+msgid "Contact Number"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Price"
+msgstr "Pris"
+
+#. module: auction
+#: report:bids.phones.details:0
+msgid "-"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Photos"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.make.invoice,number:0
+#: field:auction.lots.make.invoice.buyer,number:0
+msgid "Invoice Number"
+msgstr "Fakturanummer"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:87
+#: code:addons/auction/wizard/auction_lots_numerotate.py:77
+#: code:addons/auction/wizard/auction_lots_numerotate.py:95
+#: code:addons/auction/wizard/auction_lots_numerotate.py:122
+#: code:addons/auction/wizard/auction_lots_numerotate.py:137
+#: code:addons/auction/wizard/auction_lots_numerotate.py:173
+#, python-format
+msgid "Active IDs not Found"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_aie_send.py:167
+#: code:addons/auction/wizard/auction_aie_send_result.py:117
+#, python-format
+msgid "Connection to WWW.Auction-in-Europe.com failed !"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,gross_revenue:0
+msgid "Gross Revenue"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.open_board_auction
+msgid "Auction board"
+msgstr ""
+
+#. module: auction
+#: field:aie.category,name:0
+#: view:auction.artists:0
+#: report:bids.lots:0
+msgid "Name"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,name:0
+#: field:auction.lots,bord_vnd_id:0
+msgid "Depositer Inventory"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:692
+#, python-format
+msgid "The Buyer has no Invoice Address."
+msgstr ""
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total adj."
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.sms.send,user:0
+msgid "Login"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction_adjudication
+msgid "report_auction_adjudication"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.seller_lots_3
+msgid "Seller Form"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,lot_type:0
+#: field:report.auction,lot_type:0
+msgid "Object category"
+msgstr ""
+
+#. module: auction
+#: view:auction.taken:0
+msgid "Mark Lots"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots
+msgid "Auction Object"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,obj_num:0
+#: field:auction.lots.enable,confirm_en:0
+msgid "Catalog Number"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Accounting"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.bid_phone
+msgid "Bids phones"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,avg_estimation:0
+msgid "Avg estimation"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Debit:"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,author_right:0
+msgid "Author rights"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+#: view:auction.dates:0
+#: view:auction.deposit:0
+#: view:auction.lots:0
+#: view:report.auction:0
+msgid "Group By..."
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,journal_id:0
+msgid "Account journal for buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,bid_lines:0
+#: report:auction.bids:0
+#: report:bids.lots:0
+#: model:ir.model,name:auction.model_auction_bid_line
+msgid "Bid"
+msgstr "Bud"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total net rev."
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Update"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+#: model:ir.ui.menu,name:auction.auction_seller_menu
+msgid "Sellers"
+msgstr "Sælgere"
+
+#. module: auction
+#: help:auction.lots,lot_est2:0
+msgid "Maximum Estimate Price"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Notes"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+msgid "Move to Auction date"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of unsold items:"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Create Invoices"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,auction_id:0
+#: view:auction.dates:0
+#: field:auction.lots.auction.move,auction_id:0
+msgid "Auction Date"
+msgstr ""
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid ", ID"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Adj.("
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.lot_list_inv
+msgid "Lots List - Landscape"
+msgstr ""
+
+#. module: auction
+#: view:auction.artists:0
+msgid "Author/Artist"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,ach_login:0
+#: field:auction.lots.buyer_map,ach_login:0
+msgid "Buyer Username"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.category,priority:0
+msgid "Priority"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Latest objects"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,lot_local:0
+msgid "Location"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "Month -1"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,is_ok:0
+msgid "When buyer pay for bank statement', this field is marked"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,ach_emp:0
+msgid "Taken Away"
+msgstr ""
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total gross rev."
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,lot_est1:0
+msgid "Minimum Estimate Price"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Date"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_numerotate.py:145
+#, python-format
+msgid "This lot does not exist !"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "July"
+msgstr "Juli"
+
+#. module: auction
+#: field:auction.bid_line,call:0
+msgid "To be Called"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+#: model:ir.actions.act_window,name:auction.action_report_auction_lots_estimation_adj_category_tree
+msgid "Min est/Adj/Max est"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,lot_est1:0
+msgid "Minimum Estimation"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_sms_send
+msgid "Sms send "
+msgstr "SMS sendt "
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+#: model:ir.actions.act_window,name:auction.action_auction_lots_auction_move
+msgid "Change Auction Date"
+msgstr ""
+
+#. module: auction
+#: field:auction.artists,birth_death_dates:0
+msgid "Lifespan"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,method:0
+msgid "Withdrawned method"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Buyer Commissions"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_auction
+#: model:ir.ui.menu,name:auction.menu_report_auction
+msgid "Auction Analysis"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:80
+#, python-format
+msgid "Payment aborted !"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.history,price:0
+msgid "Withdrawn price"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Beginning of the auction"
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,statement_id3:0
+msgid "Third Bank Statement For Buyer"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,month:0
+#: field:report.auction.object.date,month:0
+msgid "Month"
+msgstr "Måned"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Max Estimate:"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Statistical"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_deposit
+msgid "Auction Deposit Border"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_object_encoded_tree
+msgid "Object statistics"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,net_margin:0
+msgid "(Net Revenue * 100)/ Object Price"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lot_history
+msgid "Lot History"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Create invoices"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id5
+msgid "VAT 5%"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,expo1:0
+msgid "First Exposition Day"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Lot"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_artists
+msgid "auction.artists"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,avg_price:0
+msgid "Avg Price."
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,statement_id2:0
+msgid "Second Bank Statement For Buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,journal_id:0
+msgid "Buyer Journal"
+msgstr ""
+
+#. module: auction
+#: selection:auction.lots,state:0
+#: selection:report.object.encoded,state:0
+msgid "Paid"
+msgstr ""
+
+#. module: auction
+#: report:bids.lots:0
+#: report:bids.phones.details:0
+msgid "Phone"
+msgstr "Telefon"
+
+#. module: auction
+#: field:auction.lot.category,active:0
+msgid "Active"
+msgstr "Aktiv"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Exposition Dates"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax1
+msgid "TVA"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,important:0
+msgid "To be Emphatized"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Total:"
+msgstr "Total:"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax2
+msgid "TVA1"
+msgstr ""
+
+#. module: auction
+#: view:report.auction.object.date:0
+msgid "Objects per Day"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,seller_invoice_history:0
+#: field:auction.lots,sel_inv_id:0
+#: view:auction.lots.make.invoice:0
+msgid "Seller Invoice"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Objects by day"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,expo2:0
+msgid "Last exposition date for auction"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:571
+#: code:addons/auction/auction.py:686
+#, python-format
+msgid "Missed buyer !"
+msgstr ""
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid "Flagey"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Auction manager "
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_invoice.py:68
+#, python-format
+msgid ""
+"Two different buyers for the same invoice !\n"
+"Please correct this problem before invoicing"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Invoice"
+msgstr "Faktura"
+
+#. module: auction
+#: field:auction.lots,vnd_lim:0
+msgid "Seller limit"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,transfer:0
+msgid "Transfer"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line3"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line2"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,obj_ret:0
+msgid "Object Ret"
+msgstr ""
+
+#. module: auction
+#: view:report.auction.adjudication:0
+msgid "Total adjudication"
+msgstr ""
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Contact the Seller"
+msgstr ""
+
+#. module: auction
+#: field:auction.taken,lot_ids:0
+msgid "Lots Emportes"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,net_margin:0
+msgid "Net Margin (%)"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid ")"
+msgstr ")"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Seller Information"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,lot_id:0
+#: view:auction.lots:0
+#: model:ir.actions.act_window,name:auction.action_all_objects
+#: model:ir.ui.menu,name:auction.auction_all_objects_menu
+msgid "Objects"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Seller Invoices"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Paid:"
+msgstr "Betalt:"
+
+#. module: auction
+#: field:auction.deposit,total_neg:0
+msgid "Allow Negative Amount"
+msgstr ""
+
+#. module: auction
+#: help:auction.pay.buy,amount2:0
+msgid "Amount For Second Bank Statement"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.history,auction_id:0
+#: field:report.auction,auction:0
+#: field:report.auction.adjudication,name:0
+msgid "Auction date"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "SMS Text"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,auction1:0
+msgid "First Auction Day"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Create Invoices For Buyer"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Names"
+msgstr ""
+
+#. module: auction
+#: view:auction.artists:0
+#: model:ir.ui.menu,name:auction.menu_auction_artist
+msgid "Artists"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay Objects"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,expo1:0
+msgid "Beginning exposition date for auction"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_line_open
+msgid "Open lots"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_open_deposit
+msgid "Deposit slip"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_enable
+msgid "Lots Enable"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Lots"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,seller_price:0
+msgid "Seller price"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.buy_id_list
+msgid "Buyer List"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Buyer costs("
+msgstr ""
+
+#. module: auction
+#: field:auction.pay.buy,statement_id1:0
+#: field:auction.pay.buy,statement_id2:0
+#: field:auction.pay.buy,statement_id3:0
+msgid "Statement"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,seller_price:0
+#: help:auction.lots.make.invoice,amount:0
+msgid "Seller Price"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax20
+#: model:account.tax,name:auction.auction_tax6
+msgid "Frais de vente"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id1
+msgid "VAT 1%"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax
+msgid "Droit d'auteur"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_buyer_map
+msgid "Map Buyer"
+msgstr ""
+
+#. module: auction
+#: field:report.auction.object.date,name:0
+msgid "Created date"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,bord_vnd_id:0
+msgid ""
+"Provide deposit information: seller, Withdrawned Method, Object, Deposit "
+"Costs"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,net_revenue:0
+#: field:report.object.encoded,net_revenue:0
+msgid "Net revenue"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63
+#: code:addons/auction/wizard/auction_pay_buy.py:87
+#, python-format
+msgid "Error!"
+msgstr "Fejl!"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of items:"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.tax_buyer_author
+msgid "Author rights (4%)"
+msgstr ""
+
+#. module: auction
+#: field:report.object.encoded,estimation:0
+msgid "Estimation"
+msgstr ""
+
+#. module: auction
+#: model:ir.module.module,description:auction.module_meta_information
+msgid ""
+"\n"
+" This module manages the records of the artists,\n"
+" the articles to be put up for auction,the buyers and\n"
+" sellers.\n"
+"\n"
+" It completely manages an auction such as managing bids,\n"
+" keeping track of the sold articles along with the paid\n"
+" and unpaid objects including delivery of the articles.\n"
+" Dashboards for auction that includes:\n"
+" * My Latest Objects (list)\n"
+" * My Latest Deposits (list)\n"
+" * Objects Statistics (list)\n"
+" * My Objects By Day (list)\n"
+" "
+msgstr ""
+
+#. module: auction
+#: view:auction.taken:0
+msgid "OK"
+msgstr "OK"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.buyer_form_id
+msgid "Buyer Form"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,partner_id:0
+msgid "Buyer Name"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,day:0
+msgid "Day"
+msgstr "Dag"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice
+msgid "Invoice Seller objects"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,gross_margin:0
+msgid "Gross Margin (%)"
+msgstr ""
+
+#. module: auction
+#: selection:auction.dates,state:0
+#: selection:report.auction.adjudication,state:0
+msgid "Closed"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Search Next Auction Dates"
+msgstr ""
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Print Auction Catalog Flagey Report..."
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,ach_avance:0
+msgid "Buyer Advance"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,obj_comm:0
+msgid "Commission"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Min/Adj/Max"
+msgstr ""
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Catalog Flagey Report"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,obj_price:0
+msgid "Object Price"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+msgid "Bids Lines"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Catalog"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,auction_id:0
+msgid "Auction for object"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit.cost,account:0
+msgid "Destination Account"
+msgstr ""
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_config_menu
+msgid "Configuration"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:80
+#, python-format
+msgid ""
+"You should pay all the total: \"%.2f\" are missing to accomplish the payment."
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_pay_buy
+msgid "Pay buy"
+msgstr ""
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_outils_menu
+msgid "Tools Bar Codes"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit.cost,deposit_id:0
+msgid "Deposit"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,expo2:0
+msgid "Last Exposition Day"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_able
+msgid "Lots able"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id3
+msgid "VAT 10%"
+msgstr ""
+
+#. module: auction
+#: field:auction.artists,name:0
+msgid "Artist/Author Name"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "December"
+msgstr "December"
+
+#. module: auction
+#: field:auction.lots,image:0
+msgid "Image"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,buyer_price:0
+#: help:auction.lots.make.invoice.buyer,amount:0
+msgid "Buyer Price"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lot_category
+msgid "Auction Lots Category"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id2
+msgid "VAT 20%"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_payer_sel
+msgid "Auction payment for seller"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+msgid "Taken away"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.seller_form_id
+msgid "Seller List"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Costs"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.category,name:0
+msgid "Category Name"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "........."
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction Summary tree view"
+msgstr ""
+
+#. module: auction
+#: report:report.auction.buyer.result:0
+msgid "Adj"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+#: model:ir.model,name:auction.model_auction_dates
+msgid "Auction Dates"
+msgstr ""
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_board_auction_open
+msgid "Auction DashBoard"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,user_id:0
+#: field:report.auction.adjudication,user_id:0
+#: field:report.auction.object.date,user_id:0
+#: field:report.object.encoded,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Payment Lines"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:692
+#, python-format
+msgid "Missed Address !"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,net_revenue:0
+msgid "Buyer Price - Seller Price - Indirect Cost"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_open_bid
+msgid "Open Bids"
+msgstr ""
+
+#. module: auction
+#: field:auction.artists,pseudo:0
+msgid "Pseudo"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Not sold"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax3
+#: field:auction.dates,buyer_costs:0
+msgid "Buyer Costs"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Auction Date:"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_aie_send.py:167
+#: code:addons/auction/wizard/auction_aie_send_result.py:116
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:70
+#: code:addons/auction/wizard/auction_lots_numerotate.py:145
+#, python-format
+msgid "Error"
+msgstr "Fejl"
+
+#. module: auction
+#: field:auction.dates,buyer_invoice_history:0
+#: field:auction.lots,ach_inv_id:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Buyer Invoice"
+msgstr ""
+
+#. module: auction
+#: report:auction.bids:0
+msgid "Tel"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,artist_id:0
+msgid "Artist/Author"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.total_result1
+msgid "Auction Totals with lists"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "General Information"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+#: view:auction.lots.buyer_map:0
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+#: view:auction.lots.sms.send:0
+#: view:auction.pay.buy:0
+msgid "Close"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_object_encoded
+msgid "Object encoded"
+msgstr ""
+
+#. module: auction
+#: view:auction.bid:0
+msgid "Search Auction Bid"
+msgstr ""
+
+#. module: auction
+#: report:bids.phones.details:0
+msgid "Est"
+msgstr ""
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Seller Commissions"
+msgstr ""
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Object statistic"
+msgstr ""
+
+#. module: auction
+#: help:auction.dates,journal_seller_id:0
+msgid "Account journal for seller"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,auction2:0
+msgid "Last Auction Day"
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Objects Description"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:87
+#, python-format
+msgid "No auction date for \"%s\": Please set one."
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,info:0
+#: report:bids.phones.details:0
+msgid "Description"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "May"
+msgstr "Maj"
+
+#. module: auction
+#: field:auction.lots,obj_price:0
+msgid "Adjudication price"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,acc_income:0
+msgid "Income Account"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.sms.send,password:0
+msgid "Password"
+msgstr ""
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "February"
+msgstr "Februar"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "April"
+msgstr "April"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay objects"
+msgstr ""
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "# objects"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Adjudication:"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.details_bids_phones
+msgid "Bids per lot (phone)"
+msgstr ""
+
+#. module: auction
+#: field:report.auction,buyer_login:0
+msgid "Buyer Login"
+msgstr ""
+
+#. module: auction
+#: field:auction.deposit,tax_id:0
+msgid "Expenses"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_payer
+msgid "Auction payer"
+msgstr ""
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Auction name:"
+msgstr ""
+
+#. module: auction
+#: view:board.board:0
+msgid "Latest deposits"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.art2
+msgid "Artists Biography"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,year:0
+msgid "Year"
+msgstr "År"
+
+#. module: auction
+#: field:auction.lots,history_ids:0
+msgid "Auction history"
+msgstr ""
diff --git a/addons/auction/report/artists_lots.py b/addons/auction/report/artists_lots.py
index 981440dac53..6c9344c88db 100644
--- a/addons/auction/report/artists_lots.py
+++ b/addons/auction/report/artists_lots.py
@@ -21,14 +21,15 @@
from report.interface import report_int
import netsvc
+import openerp.pooler
class report_artistlot(report_int):
def __init__(self, name):
report_int.__init__(self, name)
def create(self, cr, uid, ids, datas, context):
- service = netsvc.LocalService("object_proxy")
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', ids, ['artist_id'])
+ pool = pooler.get_pool(cr.dbname)
+ lots = pool.get('auction.lots').read(cr, uid, ids, ['artist_id'])
artists = []
for lot in lots:
if lot['artist_id'] and lot['artist_id'] not in artists:
diff --git a/addons/auction/report/seller_address.py b/addons/auction/report/seller_address.py
index 315533e99f4..7a7c10cb4aa 100644
--- a/addons/auction/report/seller_address.py
+++ b/addons/auction/report/seller_address.py
@@ -20,15 +20,15 @@
##############################################################################
from report.interface import report_int
-import netsvc
+import openerp.pooler
class auction_seller(report_int):
def __init__(self, name):
report_int.__init__(self, name)
def create(self, cr, uid, ids, datas, context):
- service = netsvc.LocalService("object_proxy")
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', ids, ['bord_vnd_id'])
+ pool = openerp.pooler.get_pool(cr.dbname)
+ lots = pool.get('auction.lots').read(cr, uid, ids, ['bord_vnd_id'])
bords = {}
for l in lots:
@@ -37,7 +37,7 @@ class auction_seller(report_int):
new_ids = bords.keys()
parts = {}
- partners = service.execute(cr.dbname, uid, 'auction.deposit', 'read', new_ids, ['partner_id'])
+ partners = pool.get('auction.deposit').read(cr, uid, new_ids, ['partner_id'])
for l in partners:
if l['partner_id']:
parts[l['partner_id'][0]]=True
diff --git a/addons/auction/report/total.py b/addons/auction/report/total.py
index e878001c2e4..609a1ad3a48 100644
--- a/addons/auction/report/total.py
+++ b/addons/auction/report/total.py
@@ -32,10 +32,8 @@ class report_custom(report_rml):
report_rml.__init__(self, name, table, tmpl, xsl)
def create_xml(self, cr, uid, ids, datas, context=None):
- service = netsvc.LocalService("object_proxy")
-
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', ids, ['obj_price','ach_login','obj_comm','lot_est1','lot_est2','bord_vnd_id','ach_emp','auction_id'])
- auction = service.execute(cr.dbname, uid, 'auction.dates', 'read', [lots[0]['auction_id'][0]])[0]
+ lots = self.pool.get('auction.lots').read(cr, uid , ids, ['obj_price','ach_login','obj_comm','lot_est1','lot_est2','bord_vnd_id','ach_emp','auction_id'])
+ auction = self.pool.get('auction.dates').read(cr, uid, [lots[0]['auction_id'][0]])[0]
unsold = comm = emp = paid = unpaid = 0
est1 = est2 = adj = 0
@@ -75,7 +73,7 @@ class report_custom(report_rml):
debit = adj
- costs = service.execute(cr.dbname, uid, 'auction.lots', 'compute_seller_costs', ids)
+ costs = self.pool.get('auction.lots').compute_seller_costs(cr, uid, ids)
for cost in costs:
debit += cost['amount']
diff --git a/addons/auction/wizard/auction_aie_send.py b/addons/auction/wizard/auction_aie_send.py
index 1caec13b852..563230c0d1f 100644
--- a/addons/auction/wizard/auction_aie_send.py
+++ b/addons/auction/wizard/auction_aie_send.py
@@ -141,9 +141,8 @@ class auction_lots_send_aie(osv.osv_memory):
def _photos_send(cr, uid, uname, passwd, did, ids):
- service = netsvc.LocalService("object_proxy")
for (ref,id) in ids:
- datas = service.execute(cr.db_name, uid, 'auction.lots', 'read', [id], ['name','image'])
+ datas = self.pool.get('auction.lots').read(cr, uid, [id], ['name','image'])
if len(datas):
bin = base64.decodestring(datas[0]['image'])
fname = datas[0]['name']
@@ -186,8 +185,7 @@ class auction_lots_send_aie(osv.osv_memory):
if context is None:
context = {}
- service = netsvc.LocalService("object_proxy")
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', context.get('active_ids',[]), ['obj_num','lot_num','obj_desc','bord_vnd_id','lot_est1','lot_est2','artist_id','lot_type','aie_categ'])
+ lots = self.pool.get('auction.lots').read(cr, uid, context.get('active_ids',[]), ['obj_num','lot_num','obj_desc','bord_vnd_id','lot_est1','lot_est2','artist_id','lot_type','aie_categ'])
lots_ids = []
datas = self.read(cr, uid, ids[0],['uname','login','lang','numerotation','dates'])
for l in lots:
diff --git a/addons/auction/wizard/auction_aie_send_result.py b/addons/auction/wizard/auction_aie_send_result.py
index d6102dd0522..24489fda441 100644
--- a/addons/auction/wizard/auction_aie_send_result.py
+++ b/addons/auction/wizard/auction_aie_send_result.py
@@ -132,9 +132,8 @@ class auction_lots_pay(osv.osv_memory):
if context is None:
context = {}
import pickle
- service = netsvc.LocalService("object_proxy")
datas = self.read(cr, uid, ids[0],['uname','password','dates'])
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', context['active_ids'], ['obj_num','obj_price'])
+ lots = self.pool.get('auction.lots').read(cr, uid, context['active_ids'], ['obj_num','obj_price'])
args = pickle.dumps(lots)
self._catalog_send(datas['uname'], datas['password'], datas['dates'], args)
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/auction/wizard/auction_lots_invoice.py b/addons/auction/wizard/auction_lots_invoice.py
index 66bb5e42f2b..3994aa6ff91 100644
--- a/addons/auction/wizard/auction_lots_invoice.py
+++ b/addons/auction/wizard/auction_lots_invoice.py
@@ -49,9 +49,8 @@ class auction_lots_invoice(osv.osv_memory):
if context is None:
context = {}
res = super(auction_lots_invoice, self).default_get(cr, uid, fields, context=context)
- service = netsvc.LocalService("object_proxy")
- lots = service.execute(cr.dbname, uid, 'auction.lots', 'read', context.get('active_ids', []))
- auction = service.execute(cr.dbname, uid, 'auction.dates', 'read', [lots[0]['auction_id'][0]])[0]
+ lots = self.pool.get('auction.lots').read(cr, uid, context.get('active_ids', []))
+ auction = self.pool.get('auction.dates').read(cr, uid, [lots[0]['auction_id'][0]])[0]
price = 0.0
price_topay = 0.0
@@ -59,7 +58,7 @@ class auction_lots_invoice(osv.osv_memory):
for lot in lots:
price_lot = lot['obj_price'] or 0.0
- costs = service.execute(cr.dbname, uid, 'auction.lots', 'compute_buyer_costs', [lot['id']])
+ costs = self.pool.get('auction.lots').compute_buyer_costs(cr, uid, [lot['id']])
price_lot += costs['amount']
price += price_lot
@@ -68,7 +67,7 @@ class auction_lots_invoice(osv.osv_memory):
raise osv.except_osv(_('UserError'), _('Two different buyers for the same invoice !\nPlease correct this problem before invoicing'))
uid = lot['ach_uid'][0]
elif lot['ach_login']:
- refs = service.execute(uid, 'res.partner', 'search', [('ref','=',lot['ach_login'])])
+ refs = self.pool.get('res.partner').search(cr, uid, [('ref','=',lot['ach_login'])])
if len(refs):
uid = refs[-1]
if 'ach_pay_id' in lot and lot['ach_pay_id']:
@@ -105,7 +104,6 @@ class auction_lots_invoice(osv.osv_memory):
"""
if context is None:
context = {}
- service = netsvc.LocalService("object_proxy")
datas = {'ids' : context.get('active_ids',[])}
res = self.read(cr, uid, ids, ['number','ach_uid'])
res = res and res[0] or {}
diff --git a/addons/base_calendar/i18n/da.po b/addons/base_calendar/i18n/da.po
new file mode 100644
index 00000000000..8bce8ed434c
--- /dev/null
+++ b/addons/base_calendar/i18n/da.po
@@ -0,0 +1,1658 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-09-23 15:56+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:59+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_related:0
+#: selection:res.alarm,trigger_related:0
+msgid "The event starts"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Hourly"
+msgstr "Hver time"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Required to Join"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,exdate:0
+#: help:calendar.todo,exdate:0
+msgid ""
+"This property defines the list of date/time exceptions for a recurring "
+"calendar component."
+msgstr ""
+
+#. module: base_calendar
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event.edit.all,name:0
+msgid "Title"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Monthly"
+msgstr "Månedligt"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invited User"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,recurrency:0
+#: help:calendar.todo,recurrency:0
+msgid "Recurrent Meeting"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_res_alarm_view
+#: model:ir.ui.menu,name:base_calendar.menu_crm_meeting_avail_alarm
+msgid "Alarms"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Sunday"
+msgstr "Søndag"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,role:0
+msgid "Role"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Invitation details"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Fourth"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,show_as:0
+#: field:calendar.todo,show_as:0
+msgid "Show as"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,day:0
+#: selection:base.calendar.set.exrule,select1:0
+#: field:calendar.event,day:0
+#: selection:calendar.event,select1:0
+#: field:calendar.todo,day:0
+#: selection:calendar.todo,select1:0
+msgid "Date of month"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Public"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid " "
+msgstr " "
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "March"
+msgstr "Marts"
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:414
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90
+#, python-format
+msgid "Warning !"
+msgstr "Advarsel!"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Friday"
+msgstr "Fredag"
+
+#. module: base_calendar
+#: field:calendar.event,allday:0
+#: field:calendar.todo,allday:0
+msgid "All Day"
+msgstr "Hele dagen"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,select1:0
+#: field:calendar.event,select1:0
+#: field:calendar.todo,select1:0
+msgid "Option"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,availability:0
+#: selection:calendar.event,show_as:0
+#: selection:calendar.todo,show_as:0
+#: selection:res.users,availability:0
+msgid "Free"
+msgstr "Ledig"
+
+#. module: base_calendar
+#: help:calendar.attendee,rsvp:0
+msgid "Indicats whether the favor of a reply is requested"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_attachment
+msgid "ir.attachment"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,delegated_to:0
+msgid "The users that the original request was delegated to"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,ref:0
+msgid "Event Ref"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,we:0
+#: field:calendar.event,we:0
+#: field:calendar.todo,we:0
+msgid "Wed"
+msgstr "Ons."
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Show time as"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,tu:0
+#: field:calendar.event,tu:0
+#: field:calendar.todo,tu:0
+msgid "Tue"
+msgstr "Tir."
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Yearly"
+msgstr "Årligt"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_related:0
+#: selection:res.alarm,trigger_related:0
+msgid "The event ends"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Last"
+msgstr "Sidste"
+
+#. module: base_calendar
+#: help:calendar.attendee,state:0
+msgid "Status of the attendee's participation"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Room"
+msgstr "Rum"
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Days"
+msgstr "Dage"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Invitation Detail"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:1355
+#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:96
+#: code:addons/base_calendar/wizard/base_calendar_invite_attendee.py:143
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:128
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:136
+#, python-format
+msgid "Error!"
+msgstr "Fejl!"
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Chair Person"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Procedure"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Minutes"
+msgstr "Minutter"
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Display"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event.edit.all:0
+msgid "Edit all Occurrences"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation type"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Secondly"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,event_date:0
+#: field:calendar.attendee,event_date:0
+#: view:calendar.event:0
+msgid "Event Date"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Group By..."
+msgstr ""
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,email:0
+msgid "Provide external email address who will receive this invitation."
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.module.module,description:base_calendar.module_meta_information
+msgid ""
+"Full featured calendar system that supports:\n"
+" - Calendar of events\n"
+" - Alerts (create requests)\n"
+" - Recurring events\n"
+" - Invitations to people"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,cutype:0
+msgid "Specify the type of Invitation"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Years"
+msgstr "År"
+
+#. module: base_calendar
+#: field:calendar.alarm,event_end_date:0
+#: field:calendar.attendee,event_end_date:0
+msgid "Event End Date"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Optional Participation"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,date_deadline:0
+#: field:calendar.todo,date_deadline:0
+msgid "Deadline"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:385
+#: code:addons/base_calendar/base_calendar.py:1088
+#: code:addons/base_calendar/base_calendar.py:1090
+#, python-format
+msgid "Warning!"
+msgstr "Advarsel!"
+
+#. module: base_calendar
+#: help:calendar.event,active:0
+#: help:calendar.todo,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the "
+"event alarm information without removing it."
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.module.module,shortdesc:base_calendar.module_meta_information
+msgid "Basic Calendar Functionality"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,organizer:0
+#: field:calendar.event,organizer_id:0
+#: field:calendar.todo,organizer:0
+#: field:calendar.todo,organizer_id:0
+msgid "Organizer"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+#: field:calendar.event,user_id:0
+#: field:calendar.todo,user_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: model:res.request.link,name:base_calendar.request_link_meeting
+msgid "Event"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,edit_all:0
+#: help:calendar.todo,edit_all:0
+msgid "Edit all Occurrences of recurrent Meeting."
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_occurs:0
+#: selection:res.alarm,trigger_occurs:0
+msgid "Before"
+msgstr "Før"
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_calendar_event_edit_all
+msgid "Edit all events"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,attendee_ids:0
+#: field:calendar.event,attendee_ids:0
+#: field:calendar.todo,attendee_ids:0
+msgid "Attendees"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Confirm"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_todo
+msgid "Calendar Task"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,su:0
+#: field:calendar.event,su:0
+#: field:calendar.todo,su:0
+msgid "Sun"
+msgstr "Søn."
+
+#. module: base_calendar
+#: field:calendar.attendee,cutype:0
+msgid "Invite Type"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,partner_id:0
+msgid "Partner related to contact"
+msgstr ""
+
+#. module: base_calendar
+#: view:res.alarm:0
+msgid "Reminder details"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,parent_ids:0
+msgid "Delegrated From"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,select1:0
+#: selection:calendar.event,select1:0
+#: selection:calendar.todo,select1:0
+msgid "Day of month"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event,location:0
+#: field:calendar.event.edit.all,location:0
+#: field:calendar.todo,location:0
+msgid "Location"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,send_mail:0
+msgid "Send mail?"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,email:0
+#: selection:calendar.alarm,action:0
+#: field:calendar.attendee,email:0
+msgid "Email"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Event Detail"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Run"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,exdate:0
+#: field:calendar.todo,exdate:0
+msgid "Exception Date/Times"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Confidential"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,end_date:0
+#: field:calendar.event,end_date:0
+#: field:calendar.todo,end_date:0
+msgid "Repeat Until"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,help:base_calendar.action_res_alarm_view
+msgid ""
+"Create specific calendar alarms that may be assigned to calendar events or "
+"meetings."
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Visibility"
+msgstr "Synlighed"
+
+#. module: base_calendar
+#: field:calendar.attendee,rsvp:0
+msgid "Required Reply?"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,base_calendar_url:0
+#: field:calendar.todo,base_calendar_url:0
+msgid "Caldav URL"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "Select range to Exclude"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,recurrent_uid:0
+#: field:calendar.todo,recurrent_uid:0
+msgid "Recurrent ID"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "July"
+msgstr "Juli"
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Accepted"
+msgstr "Accepteret"
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,th:0
+#: field:calendar.event,th:0
+#: field:calendar.todo,th:0
+msgid "Thu"
+msgstr "Tor."
+
+#. module: base_calendar
+#: field:calendar.attendee,child_ids:0
+msgid "Delegrated To"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Required Reply"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,end_type:0
+#: selection:calendar.todo,end_type:0
+msgid "Forever"
+msgstr "For altid"
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "Participation required"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "_Cancel"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,create_date:0
+#: field:calendar.todo,create_date:0
+msgid "Created"
+msgstr "Oprettet"
+
+#. module: base_calendar
+#: selection:calendar.event,class:0
+#: selection:calendar.todo,class:0
+msgid "Private"
+msgstr "Privat"
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Daily"
+msgstr "Dagligt"
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:385
+#, python-format
+msgid "Can not Duplicate"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,class:0
+#: field:calendar.todo,class:0
+msgid "Mark as"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,partner_address_id:0
+msgid "Contact"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,rrule_type:0
+#: help:calendar.todo,rrule_type:0
+msgid "Let the event automatically repeat at that interval"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Delegate"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,partner_id:0
+#: view:calendar.attendee:0
+#: field:calendar.attendee,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: selection:base_calendar.invite.attendee,type:0
+msgid "Partner Contacts"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "_Ok"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "First"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Privacy"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,vtimezone:0
+#: field:calendar.todo,vtimezone:0
+msgid "Timezone"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Subject"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "September"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "December"
+msgstr ""
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,send_mail:0
+msgid "Check this if you want to send an Email to Invited Person"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Availability"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event.edit.all:0
+msgid "_Save"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Individual"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,count:0
+#: help:calendar.todo,count:0
+msgid "Repeat x times"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,user_id:0
+msgid "Owner"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Delegation Info"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,date:0
+msgid "Start Date"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,cn:0
+msgid "Common name"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Declined"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "My Role"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "My Events"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Decline"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Weeks"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Group"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,edit_all:0
+#: field:calendar.todo,edit_all:0
+msgid "Edit All"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,contact_ids:0
+msgid "Contacts"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_res_alarm
+msgid "Basic Alarm Information"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,fr:0
+#: field:calendar.event,fr:0
+#: field:calendar.todo,fr:0
+msgid "Fri"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_interval:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+#: selection:res.alarm,trigger_interval:0
+msgid "Hours"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:1090
+#, python-format
+msgid "Count can not be Negative"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,member:0
+msgid "Member"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,location:0
+#: help:calendar.todo,location:0
+msgid "Location of Event"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,rrule:0
+#: field:calendar.todo,rrule:0
+msgid "Recurrent Rule"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,attach:0
+msgid "Attachment"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation From"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "End of recurrency"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,alarm_id:0
+msgid "Reminder"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+#: model:ir.model,name:base_calendar.model_base_calendar_set_exrule
+msgid "Set Exrule"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: model:ir.actions.act_window,name:base_calendar.action_view_event
+#: model:ir.ui.menu,name:base_calendar.menu_events
+msgid "Events"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_view_calendar_invite_attendee_wizard
+#: model:ir.model,name:base_calendar.model_base_calendar_invite_attendee
+msgid "Invite Attendees"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,email:0
+msgid "Email of Invited Person"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,repeat:0
+#: field:calendar.event,count:0
+#: field:calendar.todo,count:0
+#: field:res.alarm,repeat:0
+msgid "Repeat"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,dir:0
+msgid ""
+"Reference to the URIthat points to the directory information corresponding "
+"to the attendee."
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "August"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Monday"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Third"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "June"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,alarm_id:0
+msgid "Basic Alarm"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+#: view:calendar.event:0
+msgid "The"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,delegated_from:0
+msgid "Delegated From"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,user_id:0
+msgid "User"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event,date:0
+msgid "Date"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "November"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,member:0
+msgid "Indicate the groups that the attendee belongs to"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+msgid "Data"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,mo:0
+#: field:calendar.event,mo:0
+#: field:calendar.todo,mo:0
+msgid "Mon"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,count:0
+msgid "Count"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "No Repeat"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "October"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Uncertain"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,language:0
+msgid "Language"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_occurs:0
+#: field:res.alarm,trigger_occurs:0
+msgid "Triggers"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "January"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_related:0
+#: field:res.alarm,trigger_related:0
+msgid "Related to"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,interval:0
+#: field:calendar.alarm,trigger_interval:0
+#: field:res.alarm,trigger_interval:0
+msgid "Interval"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Wednesday"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/base_calendar.py:1088
+#, python-format
+msgid "Interval can not be Negative"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,name:0
+#: view:calendar.event:0
+msgid "Summary"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,active:0
+#: field:calendar.event,active:0
+#: field:calendar.todo,active:0
+#: field:res.alarm,active:0
+msgid "Active"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Choose day in the month where repeat the meeting"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,action:0
+msgid "Action"
+msgstr ""
+
+#. module: base_calendar
+#: help:base_calendar.invite.attendee,type:0
+msgid "Select whom you want to Invite"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,duration:0
+#: help:res.alarm,duration:0
+msgid ""
+"Duration' and 'Repeat' are both optional, but if one occurs, so MUST the "
+"other"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_event_edit_all
+msgid "Calendar Edit all event"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,role:0
+msgid "Participation role for the calendar user"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: field:calendar.attendee,delegated_to:0
+msgid "Delegated To"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,action:0
+msgid "Defines the action to be invoked when an alarm is triggered"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,end_type:0
+#: selection:calendar.todo,end_type:0
+msgid "End date"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Search Events"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Recurrency Option"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+#: selection:calendar.event,rrule_type:0
+#: selection:calendar.todo,rrule_type:0
+msgid "Weekly"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,active:0
+#: help:res.alarm,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the event "
+"alarm information without removing it."
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,recurrent_id:0
+#: field:calendar.todo,recurrent_id:0
+msgid "Recurrent ID date"
+msgstr ""
+
+#. module: base_calendar
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,state:0
+#: view:calendar.attendee:0
+#: field:calendar.attendee,state:0
+#: view:calendar.event:0
+#: field:calendar.event,state:0
+#: field:calendar.todo,state:0
+msgid "State"
+msgstr ""
+
+#. module: base_calendar
+#: view:res.alarm:0
+msgid "Reminder Details"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "To Review"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,freq:0
+#: field:calendar.event,freq:0
+#: field:calendar.todo,freq:0
+msgid "Frequency"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Done"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,interval:0
+#: help:calendar.todo,interval:0
+msgid "Repeat every (Days/Week/Month/Year)"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: field:base_calendar.invite.attendee,user_ids:0
+msgid "Users"
+msgstr ""
+
+#. module: base_calendar
+#: view:base.calendar.set.exrule:0
+msgid "of"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: view:calendar.event:0
+#: view:calendar.event.edit.all:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Tuesday"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,description:0
+msgid ""
+"Provides a more complete description of the "
+"calendar component, than that provided by the "
+"\"SUMMARY\" property"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Responsible User"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,availability:0
+#: selection:calendar.event,show_as:0
+#: selection:calendar.todo,show_as:0
+#: selection:res.users,availability:0
+msgid "Busy"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_event
+msgid "Calendar Event"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,state:0
+#: selection:calendar.event,state:0
+#: selection:calendar.todo,state:0
+msgid "Tentative"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,interval:0
+#: field:calendar.todo,interval:0
+msgid "Repeat every"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,end_type:0
+#: selection:calendar.todo,end_type:0
+msgid "Fix amout of times"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,recurrency:0
+#: field:calendar.todo,recurrency:0
+msgid "Recurrent"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,rrule_type:0
+#: field:calendar.todo,rrule_type:0
+msgid "Recurrency"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.actions.act_window,name:base_calendar.action_view_attendee_form
+#: model:ir.ui.menu,name:base_calendar.menu_attendee_invitations
+msgid "Event Invitations"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Thursday"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,exrule:0
+#: field:calendar.todo,exrule:0
+msgid "Exception Rule"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,language:0
+msgid ""
+"To specify the language for text values in aproperty or property parameter."
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Details"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,exrule:0
+#: help:calendar.todo,exrule:0
+msgid ""
+"Defines a rule or repeating pattern of time to exclude from the recurring "
+"rule."
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,month_list:0
+#: field:calendar.event,month_list:0
+#: field:calendar.todo,month_list:0
+msgid "Month"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+#: view:calendar.event:0
+msgid "Invite People"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,rrule:0
+#: help:calendar.todo,rrule:0
+msgid ""
+"Defines a rule or repeating pattern for recurring events\n"
+"e.g.: Every other month on the last Sunday of the month for 10 occurrences: "
+" FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=-1SU"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,dir:0
+msgid "URI Reference"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,description:0
+#: view:calendar.event:0
+#: field:calendar.event,description:0
+#: field:calendar.event,name:0
+#: field:calendar.todo,description:0
+#: field:calendar.todo,name:0
+msgid "Description"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "May"
+msgstr ""
+
+#. module: base_calendar
+#: field:base_calendar.invite.attendee,type:0
+#: view:calendar.attendee:0
+msgid "Type"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Search Invitations"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,trigger_occurs:0
+#: selection:res.alarm,trigger_occurs:0
+msgid "After"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,state:0
+msgid "Stop"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_values
+msgid "ir.values"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_ir_model
+msgid "Objects"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: selection:calendar.attendee,state:0
+msgid "Delegated"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,sa:0
+#: field:calendar.event,sa:0
+#: field:calendar.todo,sa:0
+msgid "Sat"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Choose day where repeat the meeting"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,freq:0
+msgid "Minutely"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.attendee,sent_by:0
+msgid "Specify the user that is acting on behalf of the calendar user"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+#: field:calendar.event.edit.all,date_deadline:0
+msgid "End Date"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "February"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.event,freq:0
+#: selection:calendar.todo,freq:0
+msgid "Months"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,cutype:0
+msgid "Resource"
+msgstr ""
+
+#. module: base_calendar
+#: field:res.alarm,name:0
+msgid "Name"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_alarm
+msgid "Event alarm information"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,name:0
+msgid ""
+"Contains the text to be used as the message subject for "
+"email or contains the text to be used for display"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,alarm_id:0
+#: field:calendar.event,base_calendar_alarm_id:0
+#: field:calendar.todo,alarm_id:0
+#: field:calendar.todo,base_calendar_alarm_id:0
+msgid "Alarm"
+msgstr ""
+
+#. module: base_calendar
+#: code:addons/base_calendar/wizard/base_calendar_set_exrule.py:90
+#, python-format
+msgid "Please Apply Recurrency before applying Exception Rule."
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,sent_by_uid:0
+msgid "Sent By User"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,month_list:0
+#: selection:calendar.event,month_list:0
+#: selection:calendar.todo,month_list:0
+msgid "April"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.event:0
+msgid "Recurrency period"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,week_list:0
+#: field:calendar.event,week_list:0
+#: field:calendar.todo,week_list:0
+msgid "Weekday"
+msgstr ""
+
+#. module: base_calendar
+#: field:base.calendar.set.exrule,byday:0
+#: field:calendar.event,byday:0
+#: field:calendar.todo,byday:0
+msgid "By day"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,model_id:0
+msgid "Model"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.alarm,action:0
+msgid "Audio"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,id:0
+#: field:calendar.todo,id:0
+msgid "ID"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,role:0
+msgid "For information Purpose"
+msgstr ""
+
+#. module: base_calendar
+#: view:base_calendar.invite.attendee:0
+msgid "Invite"
+msgstr ""
+
+#. module: base_calendar
+#: model:ir.model,name:base_calendar.model_calendar_attendee
+msgid "Attendee information"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,res_id:0
+msgid "Resource ID"
+msgstr ""
+
+#. module: base_calendar
+#: selection:calendar.attendee,state:0
+msgid "Needs Action"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,sent_by:0
+msgid "Sent By"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,sequence:0
+#: field:calendar.todo,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.event,alarm_id:0
+#: help:calendar.todo,alarm_id:0
+msgid "Set an alarm at this time, before the event occurs"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base_calendar.invite.attendee,type:0
+msgid "Internal User"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+#: view:calendar.event:0
+msgid "Accept"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,week_list:0
+#: selection:calendar.event,week_list:0
+#: selection:calendar.todo,week_list:0
+msgid "Saturday"
+msgstr ""
+
+#. module: base_calendar
+#: view:calendar.attendee:0
+msgid "Invitation To"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Second"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.attendee,availability:0
+#: field:res.users,availability:0
+msgid "Free/Busy"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.event,end_type:0
+#: field:calendar.todo,end_type:0
+msgid "Way to end reccurency"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,duration:0
+#: field:calendar.alarm,trigger_duration:0
+#: field:calendar.event,duration:0
+#: field:calendar.todo,date:0
+#: field:calendar.todo,duration:0
+#: field:res.alarm,duration:0
+#: field:res.alarm,trigger_duration:0
+msgid "Duration"
+msgstr ""
+
+#. module: base_calendar
+#: selection:base_calendar.invite.attendee,type:0
+msgid "External Email"
+msgstr ""
+
+#. module: base_calendar
+#: field:calendar.alarm,trigger_date:0
+msgid "Trigger Date"
+msgstr ""
+
+#. module: base_calendar
+#: help:calendar.alarm,attach:0
+msgid ""
+"* Points to a sound resource, which is rendered when the "
+"alarm is triggered for audio,\n"
+" * File which is intended to be sent as message "
+"attachments for email,\n"
+" * Points to a procedure resource, which is invoked when "
+" the alarm is triggered for procedure."
+msgstr ""
+
+#. module: base_calendar
+#: selection:base.calendar.set.exrule,byday:0
+#: selection:calendar.event,byday:0
+#: selection:calendar.todo,byday:0
+msgid "Fifth"
+msgstr ""
diff --git a/addons/base_iban/base_iban.py b/addons/base_iban/base_iban.py
index 9f37558d759..6ddf2e82541 100644
--- a/addons/base_iban/base_iban.py
+++ b/addons/base_iban/base_iban.py
@@ -128,6 +128,12 @@ class res_partner_bank(osv.osv):
return _('The IBAN does not seem to be correct. You should have entered something like this %s'), (iban_example)
return _('The IBAN is invalid, it should begin with the country code'), ()
+ def _check_bank(self, cr, uid, ids, context=None):
+ for partner_bank in self.browse(cr, uid, ids, context=context):
+ if partner_bank.state == 'iban' and not partner_bank.bank.bic:
+ return False
+ return True
+
def get_bban_from_iban(self, cr, uid, ids, context=None):
'''
This function returns the bank account number computed from the iban account number, thanks to the mapping_list dictionary that contains the rules associated to its country.
@@ -157,7 +163,10 @@ class res_partner_bank(osv.osv):
# to not break community modules.
'iban': fields.related('acc_number', string='IBAN', size=34, readonly=True, help="International Bank Account Number", type="char"),
}
- _constraints = [(check_iban, _construct_constraint_msg, ["acc_number"])]
+ _constraints = [
+ (check_iban, _construct_constraint_msg, ["iban"]),
+ (_check_bank, '\nPlease define BIC/Swift code on bank for bank type IBAN Account to make valid payments', ['bic'])
+ ]
res_partner_bank()
diff --git a/addons/base_iban/i18n/da.po b/addons/base_iban/i18n/da.po
new file mode 100644
index 00000000000..8ff987c7e56
--- /dev/null
+++ b/addons/base_iban/i18n/da.po
@@ -0,0 +1,92 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-09-23 16:04+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:58+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: base_iban
+#: model:ir.module.module,shortdesc:base_iban.module_meta_information
+msgid "Create IBAN bank accounts"
+msgstr ""
+
+#. module: base_iban
+#: code:addons/base_iban/base_iban.py:120
+#, python-format
+msgid ""
+"The IBAN does not seems to be correct. You should have entered something "
+"like this %s"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_zip_field
+msgid "zip"
+msgstr ""
+
+#. module: base_iban
+#: help:res.partner.bank,iban:0
+msgid "International Bank Account Number"
+msgstr ""
+
+#. module: base_iban
+#: model:ir.model,name:base_iban.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "Bankkonti"
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_country_field
+msgid "country_id"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_swift_field
+msgid "bic"
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_iban_field
+msgid "iban"
+msgstr ""
+
+#. module: base_iban
+#: code:addons/base_iban/base_iban.py:121
+#, python-format
+msgid "The IBAN is invalid, It should begin with the country code"
+msgstr ""
+
+#. module: base_iban
+#: field:res.partner.bank,iban:0
+msgid "IBAN"
+msgstr "IBAN"
+
+#. module: base_iban
+#: model:res.partner.bank.type,name:base_iban.bank_iban
+msgid "IBAN Account"
+msgstr ""
+
+#. module: base_iban
+#: model:ir.module.module,description:base_iban.module_meta_information
+msgid ""
+"\n"
+"This module installs the base for IBAN (International Bank Account Number) "
+"bank accounts and checks for its validity.\n"
+"\n"
+" "
+msgstr ""
+
+#. module: base_iban
+#: model:res.partner.bank.type.field,name:base_iban.bank_acc_number_field
+msgid "acc_number"
+msgstr ""
diff --git a/addons/base_setup/base_setup_views.xml b/addons/base_setup/base_setup_views.xml
index afc64d3f83c..a6059148b51 100644
--- a/addons/base_setup/base_setup_views.xml
+++ b/addons/base_setup/base_setup_views.xml
@@ -70,6 +70,7 @@
+ 2
@@ -89,18 +90,18 @@
-
- Import or Create Customers
- ir.actions.act_window
- res.partner
- form
- tree,form
-
- Create some Customers, Suppliers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
-
-
-
-
+
+ Create or Import Customers
+ ir.actions.act_window
+ res.partner
+ form
+ tree,form
+
+ Create or Import Customers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
+
+
+
+
@@ -221,6 +222,7 @@
+ 1
diff --git a/addons/base_tools/i18n/da.po b/addons/base_tools/i18n/da.po
new file mode 100644
index 00000000000..14effb86350
--- /dev/null
+++ b/addons/base_tools/i18n/da.po
@@ -0,0 +1,32 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:14+0000\n"
+"PO-Revision-Date: 2011-09-23 15:37+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:59+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: base_tools
+#: model:ir.module.module,shortdesc:base_tools.module_meta_information
+msgid "Common base for tools modules"
+msgstr ""
+
+#. module: base_tools
+#: model:ir.module.module,description:base_tools.module_meta_information
+msgid ""
+"\n"
+" "
+msgstr ""
+"\n"
+" "
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index c2dd5027b71..c3f28c6a66f 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -126,6 +126,11 @@ Creates a dashboard for CRM that includes:
'test/test_crm_recurrent_meeting.yml',
'test/test_crm_stage_changes.yml',
'test/test_crm_recurrent_meeting_case2.yml',
+ 'test/test_crm_lead_case2.yml',
+ 'test/test_crm_opportunity_case2.yml',
+ 'test/test_crm_phonecall_case2.yml',
+ 'test/test_crm_partner2opportunity.yml',
+ 'test/test_crm_segmentation.yml',
],
'installable': True,
'active': False,
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index c7bc461fa1f..512192ddce7 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -29,8 +29,8 @@ from tools.translate import _
MAX_LEVEL = 15
AVAILABLE_STATES = [
- ('draft', 'Draft'),
- ('open', 'Open'),
+ ('draft', 'New'),
+ ('open', 'In Progress'),
('cancel', 'Cancelled'),
('done', 'Closed'),
('pending', 'Pending'),
diff --git a/addons/crm/crm_installer_view.xml b/addons/crm/crm_installer_view.xml
index e517d242f5c..782083e4669 100644
--- a/addons/crm/crm_installer_view.xml
+++ b/addons/crm/crm_installer_view.xml
@@ -26,7 +26,7 @@
- Create Sales Team
+ Define Sales Teamir.actions.act_windowcrm.case.sectionform
@@ -39,6 +39,7 @@
10
+
@@ -54,8 +55,8 @@
+ 10
-
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 1a2e1f706ac..d631e371948 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -120,7 +120,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
@@ -371,9 +371,9 @@
+ string="New"
+ name="current" help="New Leads"
+ domain="[('state','=','draft')]"/>
@@ -411,7 +411,7 @@
-
+
@@ -515,7 +515,7 @@
-
+
@@ -580,7 +580,7 @@
-
+
@@ -674,9 +674,9 @@
+ domain="[('state','=','draft')]"/>
diff --git a/addons/crm/crm_phonecall_menu.xml b/addons/crm/crm_phonecall_menu.xml
index 55e7657ec05..0531736572c 100644
--- a/addons/crm/crm_phonecall_menu.xml
+++ b/addons/crm/crm_phonecall_menu.xml
@@ -106,7 +106,7 @@
[('state','!=','done')]
-
+ Scheduled calls list all the calls to be done by your sales team. A salesman can record the information about the call in the form view. This information will be stored in the partner form to trace every contact you have with a customer. You can also import a .CSV file with a list of calls to be done by your sales team.
diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml
index d312a58febd..54ea8bd7dfc 100644
--- a/addons/crm/crm_phonecall_view.xml
+++ b/addons/crm/crm_phonecall_view.xml
@@ -107,7 +107,7 @@
-
+
@@ -182,9 +182,6 @@
search
-
+
+
+ CRM - Scheduled Calls Search
+ crm.phonecall
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index 09c08108b56..4c165d5aa81 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -73,11 +73,13 @@
@@ -93,9 +95,13 @@
+ string="New"
+ domain="[('state','=','draft')]"
+ help="Leads/Opportunities which are in New state"/>
+ Leads Analysiscrm.lead.reportform
- {'search_default_filter_lead': 1, "search_default_user":1, "search_default_this_month":1, 'group_by_no_leaf':1, 'group_by':[]}
+ {'search_default_lead': 1, "search_default_user":1, "search_default_this_month":1, 'group_by_no_leaf':1, 'group_by':[]}tree,graph[]Leads Analysis allows you to check different CRM related information. Check for treatment delays, number of responses given and emails sent. You can sort out your leads analysis by different groups to get accurate grained analysis.
@@ -231,7 +237,7 @@
Opportunities Analysiscrm.lead.reportform
- {"search_default_filter_opportunity":1, "search_default_opportunity": 1, "search_default_user":1,"search_default_this_month":1,'group_by_no_leaf':1,'group_by':[]}
+ {"search_default_opportunity":1,"search_default_opportunity": 1, "search_default_user":1,"search_default_this_month":1,'group_by_no_leaf':1,'group_by':[]}tree,graphOpportunities Analysis gives you an instant access to your opportunities with information such as the expected revenue, planned cost, missed deadlines or the number of interactions per opportunity. This report is mainly used by the sales manager in order to do the periodic review with the teams of the sales pipeline.
diff --git a/addons/crm/test/test_crm_lead.yml b/addons/crm/test/test_crm_lead.yml
index 52472a9d9e8..6a954939e04 100644
--- a/addons/crm/test/test_crm_lead.yml
+++ b/addons/crm/test/test_crm_lead.yml
@@ -1,8 +1,18 @@
-- |
+- |
In order to test the CRM in OpenERP,
I will do a customer qualification process that
starts with a fist contact with a customer (a lead), which will be converted to a
business opportunity and a partner.
+-
+ I check installer report.
+-
+ !record {model: base.setup.installer , id: base_action_rule_0_1}:
+ name: Test_action
+-
+ I create the view at the time of setup.
+-
+ !python {model: base.setup.installer}: |
+ self.fields_view_get(cr, uid,view_id=None, view_type='form', context=None, toolbar=False, submenu=False)
- |
In order to test the flow, I create a two new users "user_crm" and
I assign the group "salesman".
@@ -25,26 +35,36 @@
email_from: info@mycustomer.com
name: New Customer
partner_name: Capegemini
+ partner_id: base.res_partner_9
phone: (855) 924-4364
mobile: (333) 715-1450
section_id: crm.section_sales_department
referred: False
- |
- I check that the lead is in 'draft' state,
+ I check that the lead is in 'draft' state.
-
!assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in Draft}:
- state == "draft"
-
- I open lead by click on "Open" button,
+ I open lead by click on "Open" button.
-
!python {model: crm.lead}: |
self.case_open(cr, uid, [ref("crm_lead_newcustomer0")])
+ fields={
+ 'day_open': 0.0,
+ 'day_close': 0.0
+ }
+ self._compute_day(cr, uid, [ref("crm_lead_newcustomer0")], fields, context)
- |
I check that lead is now in 'open' state.
-
!assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in open state}:
- state == "open"
-
+-
+ I search id for case object.
+-
+ !python {model: crm.case.categ}: |
+ self._find_object_id(cr, uid, context)
- |
As the lead seems to be a real business opportunity, I will convert it to a
partner
@@ -56,16 +76,40 @@
assert action['res_model'] == 'crm.lead2opportunity.partner'
-
|
- Now, select "create a new partner" option in this wizard.
+ I select "create a new partner" option.
-
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_0}:
action: 'create'
name: 'convert'
-
- Then, Click on "Create Opportunity" button of this wizard.
+ Then, Click on "Create Opportunity" button.
-
!python {model: crm.lead2opportunity.partner}: |
self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_0")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
+-
+ |
+ I select "Link to an existing partner" option.
+-
+ !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_1}:
+ action: 'exist'
+ name: 'existing partner'
+-
+ Then, Click on "Create Opportunity" button.
+-
+ !python {model: crm.lead2opportunity.partner}: |
+ self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_1")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
+-
+ |
+ I select "Do not link to a partner" option.
+-
+ !record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner_create_2}:
+ action: 'nothing'
+ name: 'Do not link to a partner'
+-
+ Then, Click on "Create Opportunity" button.
+-
+ !python {model: crm.lead2opportunity.partner}: |
+ self.action_apply(cr, uid, [ref("crm_lead2opportunity_partner_create_2")], {'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
- |
In order to check the opportunity is created or not, I check type.
-
@@ -73,6 +117,39 @@
lead = self.browse(cr, uid, ref("crm_lead_newcustomer0"))
assert lead.type == 'opportunity'
+-
+ I create mass report of lead to opprtunity partner.
+-
+ !record {model: crm.lead2opportunity.partner.mass, id: crm_lead2opportunity_partner_mass0}:
+ user_ids:
+ - base.user_root
+ section_id: crm.section_sales_department
+-
+ Then, execute that mass wizard.
+-
+ !python {model: crm.lead2opportunity.partner.mass}: |
+ self.mass_convert(cr, uid, [ref("crm_lead2opportunity_partner_mass0")],{'active_ids': [ref("crm_lead_newcustomer0")], 'active_id': ref("crm_lead_newcustomer0")})
+-
+ I close lead by click on "close" button.
+-
+ !python {model: crm.lead}: |
+ self.case_close(cr, uid, [ref("crm_lead_newcustomer0")])
+- |
+ I check that lead is now in 'done' state.
+-
+ !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in done state}:
+ - state == "done"
+-
+ I cancel lead by click on "cancel" button.
+-
+ !python {model: crm.lead}: |
+ self.case_cancel(cr, uid, [ref("crm_lead_newcustomer0")])
+- |
+ I check that lead is now in 'cancel' state.
+-
+ !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in cancel state}:
+ - state == "cancel"
+
#-
# |
# yaml is also not working with smtp server and send new email.
@@ -89,4 +166,3 @@
- |
I Reply to last Email to lead with some document attached.and check that communication history generated or not.
-
diff --git a/addons/crm/test/test_crm_lead_case2.yml b/addons/crm/test/test_crm_lead_case2.yml
new file mode 100644
index 00000000000..23a654d31a8
--- /dev/null
+++ b/addons/crm/test/test_crm_lead_case2.yml
@@ -0,0 +1,151 @@
+-
+ In order to do complete test the CRM in OpenERP,
+ I will create new full configured record and carry test on it.
+- |
+ I Start by creating "Test Sales Team" with No Unlink.
+ I create a crm.case.section record.
+-
+ !record {model: crm.case.section, id: crm_case_section_demosalesteam}:
+ code: DEMO
+ complete_name: Test Sales Team
+ name: Test Sales Team
+ allow_unlink: False
+ member_ids:
+ - base.user_admin
+ stage_ids:
+ - crm.stage_lead1
+ - crm.stage_lead2
+ - crm.stage_lead3
+ - crm.stage_lead4
+ - crm.stage_lead5
+ - crm.stage_lead6
+ working_hours: 0.0
+ resource_calendar_id: resource.timesheet_group1
+ parent_id: crm.section_sales_department
+-
+ I assign segmentation.
+-
+ !record {model: res.users, id: res_users_usercrm0}:
+ context_section_id: crm_case_section_demosalesteam
+- |
+ I create a new lead "Test Customer" and I provide an address to this
+ demo customer and email "info@democustomer.com" and Also "Test Sales Team".
+-
+ !record {model: crm.lead, id: crm_lead_democustomer}:
+ email_from: info@democustomer.com
+ name: Test Customer
+ partner_name: NotSoTinySARL
+ phone: (+32).81.81.37.00
+ mobile: (+32).81.81.37.00
+ section_id: crm_case_section_demosalesteam
+ referred: False
+ type: lead
+-
+ I check that the lead is in 'draft' state.
+-
+ !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in Draft}:
+ - state == "draft"
+-
+ I create categories.
+-
+ !record {model: crm.case.categ, id: crm_case_categ0}:
+ name: crm_case_section_demosalesteam
+ section_id: crm_case_section_demosalesteam
+-
+ I assigning contact detail to the Lead "Test Customer" without address.
+-
+ !python {model: crm.lead}: |
+ self.onchange_partner_address_id(cr, uid, ref("crm_lead_democustomer"), None, email=False)
+
+-
+ I assigning contact detail to the Lead "Test Customer" with address.
+-
+ !python {model: crm.lead}: |
+ self.onchange_partner_address_id(cr, uid, ref("crm_lead_democustomer"), ref("base.res_partner_address_notsotinysarl0"), email=False)
+
+-
+ I selecting email "Opt-out" option for the "Test Customer" Lead.
+-
+ !python {model: crm.lead}: |
+ self.on_change_optout(cr, uid, ref("crm_lead_democustomer"), True)
+
+-
+ I change the Opt-out to Opt-in to show email receive preference.
+-
+ !python {model: crm.lead}: |
+ self.on_change_optin(cr, uid, ref("crm_lead_democustomer"), True)
+-
+ I open lead by click on "Open" button.
+-
+ !python {model: crm.lead}: |
+ self.case_open(cr, uid, [ref("crm_lead_democustomer")])
+-
+ I check that lead "Test Customer" is now in 'open' state.
+-
+ !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in open state}:
+ - state == "open"
+-
+ I reset the lead "Test Customer".
+-
+ !python {model: crm.lead}: |
+ self.case_reset(cr, uid, [ref("crm_lead_democustomer")])
+-
+ I again opening lead by click on "Open" button.
+-
+ !python {model: crm.lead}: |
+ self.case_open(cr, uid, [ref("crm_lead_democustomer")])
+-
+ I setting stage "New" for the lead "Test Customer".
+-
+ !python {model: crm.lead}: |
+ self.stage_next(cr, uid, [ref("crm_lead_democustomer")], context={'stage_type': 'lead'})
+-
+ I try to Unlink the Lead "Test Customer" demo Lead.
+-
+ !python {model: crm.lead}: |
+ try:
+ self.unlink(cr, uid, [ref("crm_lead_democustomer")])
+ except:
+ pass
+-
+ I setting Lead "Test Customer" to Pending State.
+-
+ !python {model: crm.lead}: |
+ self.case_pending(cr, uid, [ref("crm_lead_democustomer")])
+-
+ I check that lead "Test Customer" is now in 'Pending' state.
+-
+ !assert {model: crm.lead, id: crm_lead_democustomer, string: Lead in Pending state}:
+ - state == "pending"
+-
+ I Escalate the Lead "Test Customer" Parent "Sales Team".
+-
+ !python {model: crm.lead}: |
+ self.case_escalate(cr, uid, [ref("crm_lead_democustomer")])
+-
+ I add Internal Note Saying Escalated Reason.
+-
+ !record {model: crm.add.note, id: crm_add_note_0}:
+ body: Sales Lead Has Been Escalated Due to Some Technical reason to the parent 'Sales
+ Team'
+ state: unchanged
+-
+ I click a note button to attach the record.
+-
+ !python {model: crm.add.note}: |
+ context['active_model'] = "crm.lead"
+ context['active_ids'] = [ref("crm_lead_democustomer")]
+ self.action_add(cr, uid, [ref("crm_add_note_0")], context=context)
+
+-
+ I Copying this lead "Test Customer" to New Lead.
+-
+ !python {model: crm.lead}: |
+ self.copy(cr, uid, ref("crm_lead_democustomer"))
+-
+ I checking the Lead Copied or Not.
+-
+ !python {model: crm.lead}: |
+ sid = self.search(cr, uid, [('name', '=', 'Test Customer'),('state', '=', 'draft')])
+ if not sid:
+ raise AssertionError("Lead is not copied Successfully")
diff --git a/addons/crm/test/test_crm_meeting.yml b/addons/crm/test/test_crm_meeting.yml
index 9b89fff697b..8d851dd58c7 100644
--- a/addons/crm/test/test_crm_meeting.yml
+++ b/addons/crm/test/test_crm_meeting.yml
@@ -1,9 +1,9 @@
- |
- Now I will test Meetings which may be customer meeting or phonecall meeting or
+ I will test Meetings which may be customer meeting or phonecall meeting or
internal Meeting.
- |
- I start by creating a new Meeting.
--
+ I start by creating a new Meeting.
+-
!record {model: crm.meeting, id: crm_meeting_regardingpresentation0}:
categ_id: crm.categ_meet2
date: !eval time.strftime('%Y-%m-%d 16:04:00')
@@ -18,14 +18,14 @@
section_id: crm.section_sales_department
- |
I check that the Meetings is in 'UnConfirmed' state.
--
+-
!assert {model: crm.meeting, id: crm_meeting_regardingpresentation0}:
- - state == "draft"
+ - state == "draft"
- |
- I can set reminder on meeting if I put reminder "40 minutes before"
+ I can set reminder on meeting if I put reminder "40 minutes before" .
- |
For that, I first create alarm.
--
+-
!record {model: res.alarm, id: res_alarm_minituesbefore0}:
name: 40 minutes before
trigger_duration: 40
@@ -33,51 +33,51 @@
trigger_occurs: before
trigger_related: start
- |
- Now I will assign this reminder.
-
+ I will assign this reminder.
+
- !python {model: crm.meeting}: |
self.write(cr, uid, [ref('crm_meeting_regardingpresentation0')], {'alarm_id': ref("res_alarm_minituesbefore0")})
- |
In order to check recurrence on meetings I will set Recurrency to Custom
- and I set the fields so that the meeting will occur weekly on Monday and Friday 10 times
+ and I set the fields so that the meeting will occur weekly on Monday and Friday 10 times.
-
!python {model: crm.meeting}: |
self.write(cr, uid, [ref("crm_meeting_regardingpresentation0")], {'fr': 1, 'mo': 1, 'th': 1, 'tu': 1, 'we':1, 'count':10, 'interval': 1, 'rrule_type': 'weekly'})
-
+
- |
I can see from the calendar view that the meeting is scheduled on Monday and Friday
- for 10 times,
-
+ for 10 times.
+
-
!python {model: crm.meeting}: |
self.fields_view_get(cr, uid, False, 'calendar', context)
-- |
+- |
I will search for one of the recurrent event and count the number of meeting.
-
!python {model: crm.meeting}: |
import time
from datetime import datetime, date, timedelta
ids = self.search(cr, uid, [('date', '>=', time.strftime('%Y-%m-%d 00:00:00')), ('date', '<=', (datetime.now()+timedelta(31)).strftime('%Y-%m-%d 00:00:00')), ('name', '=', 'Regarding Presentation')], context={'virtual_id': True})
- assert len(ids) == 10
+ assert len(ids) == 10
- |
- Now If I want to edit meetings information for all occurrence I click on "Edit All" button.
+ If I want to edit meetings information for all occurrence I click on "Edit All" button.
-
!python {model: crm.meeting}: |
self.write(cr, uid, [ref('crm_meeting_regardingpresentation0')], {'edit_all':'True'},context)
-- |
- I can see that new meeting form is opened with same value
- I change some data for meeting and save it
- I can see from meeting's calendar view that all meeting occurrences are changed accordingly
--
+- |
+ I can see that new meeting form is opened with same value.
+ I change some data for meeting and save it.
+ I can see from meeting's calendar view that all meeting occurrences are changed accordingly.
+-
!record {model: crm.meeting, id: crm.crm_meeting_regardingpresentation0}:
alarm_id: base_calendar.alarm9
rrule_type: weekly
-- |
+- |
In order to invite people for this meetings, I click on "Invite People" button
- I can invite internal user.
--
+ I can invite internal user.
+-
!record {model: base_calendar.invite.attendee, id: base_calendar_invite_attendee_0}:
type: internal
send_mail: False
@@ -85,13 +85,13 @@
user_ids:
- base.user_demo
-
- I click on "Invite" button of "Invite attendee" wizard.
+ I click on "Invite" button of "Invite attendee" wizard.
-
!python {model: base_calendar.invite.attendee}: |
- self.do_invite(cr, uid, [ref('base_calendar_invite_attendee_0')], {'active_id': ref('crm_meeting_regardingpresentation0'), 'model' : 'crm.meeting', 'attendee_field':'attendee_ids'})
+ self.do_invite(cr, uid, [ref('base_calendar_invite_attendee_0')], {'active_id': ref('crm_meeting_regardingpresentation0'), 'model' : 'crm.meeting', 'attendee_field':'attendee_ids'})
- |
- After direct/indirect confirmation for meetings I can confirm meeting
+ After direct/indirect confirmation for meetings I can confirm meeting.
-
!python {model: crm.meeting}: |
self.case_open(cr, uid, [ref('crm_meeting_regardingpresentation0')])
diff --git a/addons/crm/test/test_crm_opportunity.yml b/addons/crm/test/test_crm_opportunity.yml
index 7640cc67815..734a1cae46c 100644
--- a/addons/crm/test/test_crm_opportunity.yml
+++ b/addons/crm/test/test_crm_opportunity.yml
@@ -11,18 +11,17 @@
stage_id: crm.stage_lead1
categ_id: crm.categ_oppor2
section_id: crm.section_sales_department
-
- |
I check that the opportunity is in 'New' state.
-
!assert {model: crm.lead, id: crm_opportunity_abcfuelcounits0}:
- state == "draft"
-- |
- I open opportunity by click on "Open" button,
--
- !python {model: crm.lead}: |
- self.case_open(cr, uid, [ref("crm_opportunity_abcfuelcounits0")])
+- |
+ I check that phonecall record is created for that opportunity.
+-
+ !python {model: crm.phonecall}: |
+ phone_obj = self.pool.get('crm.phonecall')
- |
I schedule Meeting on this current opportunity by clicking on "schedule
Meeting".
@@ -33,7 +32,7 @@
- |
I can see that Meeting's calendar view is shown.
then I click on the date on which I want to schedule meeting.
- I fill proper data for that meeting and save it
+ I fill proper data for that meeting and save it.
-
!record {model: crm.meeting, id: crm_meeting_abcfuelcounits0}:
date: !eval time.strftime('%Y-%m-%d 00:00:00')
@@ -51,13 +50,13 @@
I click on "schedule call" button and select planned date for the call.
-
!record {model: crm.opportunity2phonecall, id: crm_opportunity2phonecall_abcfuelcounits0}:
- date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')"
+ date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')"
name: 'ABC FUEL CO 829264 - 10002 units'
section_id: crm.section_sales_department
user_id: base.user_demo
categ_id: crm.categ_phone1
- |
- schedule phonecall by apply (action_apply)function of opportunity2phoncall wizard
+ schedule phonecall by opportunity2phoncall wizard.
-
!python {model: crm.opportunity2phonecall}: |
self.action_apply(cr, uid, [ref('crm_opportunity2phonecall_abcfuelcounits0')], {'active_ids': [ref("crm_opportunity_abcfuelcounits0")]})
@@ -72,10 +71,43 @@
I can see phonecall record after click on "Schedule call" wizard.
-
!record {model: crm.phonecall, id: crm_phonecall_abcfuelcounits0}:
- date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')"
+ date: !eval "(datetime.now() + timedelta(1)).strftime('%Y-%m-%d 11:15:00')"
duration: 3.0
name: 'ABC FUEL CO 829264 - 10002 units'
partner_address_id: base.res_partner_address_1
partner_id: base.res_partner_9
section_id: crm.section_sales_department
-
+- |
+ I Merge the opportunities.
+-
+ for that create two opportunities first opportunity 'Test FUEL CO'.
+-
+ !record {model: crm.lead, id: crm_opportunity_1}:
+ email_from: info@balmerinc.be
+ name: 'Test FUEL CO 829264 - 10002 units'
+ partner_address_id: base.res_partner_address_1
+ partner_id: base.res_partner_9
+ probability: 1.0
+ stage_id: crm.stage_lead1
+ categ_id: crm.categ_oppor2
+ section_id: crm.section_sales_department
+-
+ I create the opportunity 'FUEL CO'.
+-
+ !record {model: crm.lead, id: crm_opportunity_2}:
+ email_from: info@balmerinc.be
+ name: 'FUEL CO 829264 - 10002 units'
+ partner_address_id: base.res_partner_address_1
+ partner_id: base.res_partner_9
+ probability: 1.0
+ stage_id: crm.stage_lead1
+ categ_id: crm.categ_oppor2
+ section_id: crm.section_sales_department
+- |
+ I Merge two Opportunities.
+-
+ !python {model: crm.merge.opportunity}: |
+ op_list = [ref('crm_opportunity_1'),ref('crm_opportunity_2')]
+ op_ids=self.pool.get('crm.lead').browse(cr,uid,op_list)
+ lead_ids = [ref('crm_lead_newcustomer0')]
+ self.merge(cr, uid, op_ids, {'lead_ids': lead_ids})
diff --git a/addons/crm/test/test_crm_opportunity_case2.yml b/addons/crm/test/test_crm_opportunity_case2.yml
new file mode 100644
index 00000000000..dc0dbe517f1
--- /dev/null
+++ b/addons/crm/test/test_crm_opportunity_case2.yml
@@ -0,0 +1,45 @@
+- |
+ I start by creating a new Opportunity. And I select partner for opportunity.
+ I can see that after selecting partner his contact and email is automatically filled.
+-
+ !record {model: crm.lead, id: crm_opportunity_demotestopportunity}:
+ email_from: info@balmerinc.be
+ name: 'Demo Test Opportunity'
+ partner_address_id: base.res_partner_address_1
+ partner_id: base.res_partner_9
+ probability: 1.0
+ categ_id: crm.categ_oppor2
+ section_id: crm.section_sales_department
+ type: opportunity
+-
+ I check that the opportunity is in 'New' state.
+-
+ !assert {model: crm.lead, id: crm_opportunity_demotestopportunity, string: Opportunity in Draft}:
+ - state == "draft"
+-
+ I open opportunity by click on "Open" button.
+-
+ !python {model: crm.lead}: |
+ self.case_open(cr, uid, [ref("crm_opportunity_demotestopportunity")])
+-
+ I change partner of the opportunity.
+-
+ !python {model: crm.lead}: |
+ self.onchange_partner_id(cr, uid, [ref("crm_opportunity_demotestopportunity")], ref("base.res_partner_agrolait"))
+
+-
+ I change Contact Detail of the opportunity.
+-
+ !python {model: crm.lead}: |
+ self.onchange_partner_address_id(cr, uid,[ref("crm_opportunity_demotestopportunity")], ref("base.res_partner_address_8invoice"))
+
+-
+ I change Opportunity to Won State.
+-
+ !python {model: crm.lead}: |
+ self.case_mark_won(cr, uid, [ref("crm_opportunity_demotestopportunity")])
+-
+ I check that the opportunity is in 'Done' state.
+-
+ !assert {model: crm.lead, id: crm_opportunity_demotestopportunity, string: Opportunity is Won}:
+ - state == "done"
diff --git a/addons/crm/test/test_crm_partner2opportunity.yml b/addons/crm/test/test_crm_partner2opportunity.yml
new file mode 100644
index 00000000000..fe026074f4f
--- /dev/null
+++ b/addons/crm/test/test_crm_partner2opportunity.yml
@@ -0,0 +1,25 @@
+- |
+ I start by creating a new opportunity from partner.
+-
+ !record {model: crm.partner2opportunity, id: crm_partner2opportunity_id_0}:
+ name: test
+ planned_revenue: 0.0
+ partner_id: base.res_partner_9
+ probability: 0.0
+-
+ I click on "Create Opportunity" button of this wizard.
+-
+ !python {model: crm.partner2opportunity}: |
+ fields = {
+ 'name': 'test',
+ 'planned_revenue': '0.0',
+ 'partner_id': ref('base.res_partner_9'),
+ 'probability': '0.0'
+ }
+ self.default_get(cr, uid, fields, {"active_ids": [ref("crm_partner2opportunity_id_0")]})
+- |
+ In order to check the opportunity is created or not, I check type.
+-
+ !python {model: crm.partner2opportunity}: |
+ opportunity = self.make_opportunity(cr, uid, [ref("crm_partner2opportunity_id_0")], {"active_ids": [ref("crm_partner2opportunity_id_0")]})
+ assert True
diff --git a/addons/crm/test/test_crm_phonecall.yml b/addons/crm/test/test_crm_phonecall.yml
index 1885e34a5ce..0754a5b9544 100644
--- a/addons/crm/test/test_crm_phonecall.yml
+++ b/addons/crm/test/test_crm_phonecall.yml
@@ -7,16 +7,19 @@
duration: 2.0
section_id: crm.section_sales_department
-
- Now , I select partner by click on "Create a Partner" button.
+ I select partner by click on "Create a Partner" button.
-
!record {model: crm.phonecall2partner, id: crm_phonecall2partner_1}:
action: exist
partner_id: base.res_partner_9
-
- Now, click on "Continue" button of this wizard.
+ I click on "Continue" button of this wizard and make partner.
-
!python {model: crm.phonecall2partner}: |
+
+ self._select_partner(cr, uid,{"active_ids": [ref("crm_phonecall_interviewcall0")]})
+ self.open_create_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]})
self.make_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]})
- |
@@ -28,31 +31,28 @@
partner_id: base.res_partner_9
planned_revenue: 0.0
probability: 0.0
--
- Now, I click on "Convert" button of this wizard.
--
- !python {model: crm.phonecall2opportunity}: |
- self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")})
-
- |
I can see that a business opportunity is now assigned to this phonecall
-
!assert {model: crm.phonecall, id: crm_phonecall_interviewcall0}:
- opportunity_id != False
-
+-
+ I click on "Convert" button of this wizard.
+-
+ !python {model: crm.phonecall2opportunity}: |
+ self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")})
- |
And I check that the phonecall and the newly created business opportunity is linked
- to same partner
+ to same partner.
-
!python {model: crm.phonecall}: |
obj_phonecall = self.browse(cr, uid, ref('crm_phonecall_interviewcall0'))
ids = self.pool.get('crm.lead').search(cr, uid, [('name', '=', obj_phonecall.opportunity_id.name)])
obj_opp = self.pool.get('crm.lead').browse(cr, uid, ids)[0]
assert obj_phonecall.partner_id == obj_opp.partner_id
-
- |
I schedule Meeting on this current phonecall by clicking on "schedule
- Meeting"
+ Meeting".
-
!python {model: crm.phonecall}: |
self.action_make_meeting(cr, uid, [ref('crm_phonecall_interviewcall0')])
@@ -60,7 +60,7 @@
- |
I can see that Meeting's calendar view is shown.
then I click on the date on which I want schedule meeting.
- I fill proper data for that meeting and save it
+ I fill proper data for that meeting and save it.
-
!record {model: crm.meeting, id: crm_meeting_interviewcall0}:
alarm_id: base_calendar.alarm3
@@ -85,9 +85,32 @@
name: Interview call
section_id: crm.section_sales_department
user_id: base.user_root
+ action: schedule
+ categ_id: crm.categ_phone1
+-
+ I click on "schedule other call" button. and plan for other call.
+-
+ !record {model: crm.phonecall2phonecall, id: crm_phonecall2phonecall_interviewcall1}:
+ date: !eval "'%s-%s-%s 19:49:00' %(datetime.now().year,datetime.now().month,datetime.now().day)"
+ name: Interview call
+ section_id: crm.section_sales_department
+ user_id: base.user_root
+ action: log
categ_id: crm.categ_phone1
- |
I click on "Schedule" button of this wizard.
-
!python {model: crm.phonecall2phonecall}: |
+ fields = {
+ 'name': 'Interview call',
+ 'section_id': ref('crm.section_sales_department'),
+ 'user_id': ref('base.user_root'),
+ 'categ_id': ref('crm.categ_phone1')
+ }
+ self.default_get(cr, uid, fields,{'active_id': ref('crm_phonecall_interviewcall0')})
self.action_apply(cr, uid, [ref('crm_phonecall2phonecall_interviewcall0')], {'active_id': ref('crm_phonecall_interviewcall0')})
+- |
+ I click on "Schedule" button of this wizard with log option.
+-
+ !python {model: crm.phonecall2phonecall}: |
+ self.action_apply(cr, uid, [ref('crm_phonecall2phonecall_interviewcall1')], {'active_id': ref('crm_phonecall_interviewcall0')})
diff --git a/addons/crm/test/test_crm_phonecall_case2.yml b/addons/crm/test/test_crm_phonecall_case2.yml
new file mode 100644
index 00000000000..1b07121183c
--- /dev/null
+++ b/addons/crm/test/test_crm_phonecall_case2.yml
@@ -0,0 +1,26 @@
+- |
+ I start by creating a new phonecall.
+-
+ !record {model: crm.phonecall, id: crm_phonecall_dummycall}:
+ date: !eval time.strftime('%Y-%m-%d 08:00:00')
+ name: Dummy call
+ duration: 0.0
+ section_id: crm.section_sales_department
+ partner_id: base.res_partner_agrolait
+ state: open
+-
+ I change Contact Detail of the Partner.
+-
+ !python {model: crm.phonecall}: |
+ self.onchange_partner_address_id(cr, uid,[ref("crm_phonecall_dummycall")], ref("base.res_partner_address_8invoice"))
+
+-
+ I setting Phone call to Held (Done).
+-
+ !python {model: crm.phonecall}: |
+ self.case_close(cr, uid, [ref("crm_phonecall_dummycall")])
+-
+ I check that the hone call is in 'Held' state.
+-
+ !assert {model: crm.phonecall, id: crm_phonecall_dummycall, string: Phone call Helded}:
+ - state == "done"
diff --git a/addons/crm/test/test_crm_recurrent_meeting_case2.yml b/addons/crm/test/test_crm_recurrent_meeting_case2.yml
index 585c6af73ae..b6afeb6906e 100644
--- a/addons/crm/test/test_crm_recurrent_meeting_case2.yml
+++ b/addons/crm/test/test_crm_recurrent_meeting_case2.yml
@@ -21,7 +21,7 @@
meeting_ids = self.search(cr, uid, [('id', 'in', [ref('crm_meeting_testmeeting0')]),('date','>=','2011-03-13'), ('date_deadline', '<=', '2011-05-13')], context={'virtual_id': True})
assert len(meeting_ids) == 5, 'Recurrent daily meetings are not created !'
-
- Now I create a weekly meeting till a particular end date.
+ I create a weekly meeting till a particular end date.
-
!record {model: crm.meeting, id: crm_meeting_reviewcodewithprogrammer0}:
date: '2011-04-18 11:47:00'
@@ -95,4 +95,3 @@
meeting_ids = self.search(cr, uid, [('recurrent_uid', '=', ref('crm_meeting_reviewcodewithprogrammer0')), ('recurrent_id','=','2011-04-25 12:47:00')], context)
assert meeting_ids, 'Meeting is not edited !'
-
\ No newline at end of file
diff --git a/addons/crm/test/test_crm_segmentation.yml b/addons/crm/test/test_crm_segmentation.yml
new file mode 100644
index 00000000000..5563f1ce52f
--- /dev/null
+++ b/addons/crm/test/test_crm_segmentation.yml
@@ -0,0 +1,38 @@
+- |
+ I will test segmentation which create specific partner categories criteria.
+-
+ I create a new segmentation record.
+-
+ !record {model: crm.segmentation, id: crm_segmentation_id_0}:
+ categ_id: base.res_partner_category_5
+ exclusif: true
+ name: segment
+ som_interval: 0.0
+ sales_purchase_active : True
+-
+ I start the process.
+-
+ !python {model: crm.segmentation}: |
+ self.process_start(cr, uid, [ref("crm_segmentation_id_0")],context)
+-
+ I continue the segmentation process.
+-
+ !python {model: crm.segmentation}: |
+ context.update({'start': True})
+ self.process_continue(cr, uid, [ref("crm_segmentation_id_0")], context)
+-
+ I create the segmentation line.
+-
+ !record {model: crm.segmentation.line, id: crm_segmentation_line_id_0}:
+ expr_name: sale
+ expr_operator: '>'
+ expr_value: 1000.0
+ name: Rule1
+ operator: or
+ segmentation_id: crm_segmentation_id_0
+
+-
+ I check the Segmentation line record.
+-
+ !python {model: crm.segmentation.line}: |
+ self.test(cr, uid, [ref("crm_segmentation_line_id_0")],partner_id=0)
diff --git a/addons/crm/test/test_crm_stage_changes.yml b/addons/crm/test/test_crm_stage_changes.yml
index c9c25bec604..391a328bffe 100644
--- a/addons/crm/test/test_crm_stage_changes.yml
+++ b/addons/crm/test/test_crm_stage_changes.yml
@@ -1,10 +1,10 @@
-
In order to test the changes on stage of a lead or an opportunity with OpenERP,
I create some leads and test the stage changes.
--
+-
I want to change the probability to 0.0 when the opportunity is marked as lost.
So I set its Change probability automatically true.
--
+-
!record {model: crm.case.stage, id: crm.stage_lead6}:
name: Lost
on_change: true
@@ -12,9 +12,9 @@
section_ids:
- crm.section_sales_department
sequence: 0
--
+-
I create a lead 'Test Lead1'.
--
+-
!record {model: crm.lead, id: crm_lead_openerppresentation0}:
categ_id: crm.categ_oppor4
day_close: 0.0
@@ -29,7 +29,17 @@
!python {model: crm.lead}: |
self.case_open(cr, uid, [ref('crm_lead_openerppresentation0')])
-
- I find that this lead can be converted to opportunity.
+ I assigning stage.
+-
+ !python {model: crm.lead}: |
+ self.onchange_stage_id(cr, uid, [ref('crm_lead_openerppresentation0')], [], context)
+-
+ I assigning percent.
+-
+ !python {model: crm.lead}: |
+ self.stage_find_percent(cr, uid, 10.0, [])
+-
+ I find that this lead can be converted to opportunity.
-
!record {model: crm.lead2opportunity.partner, id: crm_lead2opportunity_partner0}:
action: 'create'
@@ -51,7 +61,7 @@
!python {model: crm.lead}: |
self.case_mark_lost(cr, uid, [ref('crm_lead_openerppresentation0')])
-
- Now I check whether the probability is set according to stage change or not.
+ I check whether the probability is set according to stage change or not.
-
!python {model: crm.lead}: |
opportunity = self.browse(cr, uid, ref('crm_lead_openerppresentation0'))
diff --git a/addons/crm/wizard/crm_lead_to_partner.py b/addons/crm/wizard/crm_lead_to_partner.py
index 790c6222de6..88ccacffef5 100644
--- a/addons/crm/wizard/crm_lead_to_partner.py
+++ b/addons/crm/wizard/crm_lead_to_partner.py
@@ -158,6 +158,7 @@ class crm_lead2partner(osv.osv_memory):
'name': lead.partner_name or lead.contact_name or lead.name,
'user_id': lead.user_id.id,
'comment': lead.description,
+ 'address': []
})
contact_obj.create(cr, uid, {
'partner_id': partner_id,
diff --git a/addons/crm/wizard/crm_partner_to_opportunity_view.xml b/addons/crm/wizard/crm_partner_to_opportunity_view.xml
index 762303f06ba..1111bbbbc50 100644
--- a/addons/crm/wizard/crm_partner_to_opportunity_view.xml
+++ b/addons/crm/wizard/crm_partner_to_opportunity_view.xml
@@ -31,17 +31,16 @@
formformnew
-
+
-
+
-
-
-
+
+
diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml
index 15956389e8e..a2ad01e0651 100644
--- a/addons/crm_claim/crm_claim_view.xml
+++ b/addons/crm_claim/crm_claim_view.xml
@@ -106,7 +106,7 @@
-
+
@@ -155,11 +155,11 @@
-
+
@@ -225,9 +225,9 @@
search
-
+
-
+
@@ -140,11 +140,11 @@
-
+
@@ -475,7 +475,7 @@
-
+
diff --git a/addons/event/i18n/da.po b/addons/event/i18n/da.po
new file mode 100644
index 00000000000..3e36a6a53ee
--- /dev/null
+++ b/addons/event/i18n/da.po
@@ -0,0 +1,1229 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-09-23 14:35+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:58+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: event
+#: view:event.event:0
+msgid "Invoice Information"
+msgstr "Faktura information"
+
+#. module: event
+#: help:event.event,register_max:0
+msgid "Provide Maximun Number of Registrations"
+msgstr ""
+
+#. module: event
+#: view:partner.event.registration:0
+msgid "Event Details"
+msgstr ""
+
+#. module: event
+#: field:event.event,main_speaker_id:0
+msgid "Main Speaker"
+msgstr "Hovedtaler"
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: view:report.event.registration:0
+msgid "Group By..."
+msgstr ""
+
+#. module: event
+#: field:event.event,register_min:0
+msgid "Minimum Registrations"
+msgstr ""
+
+#. module: event
+#: model:ir.model,name:event.model_event_confirm_registration
+msgid "Confirmation for Event Registration"
+msgstr ""
+
+#. module: event
+#: field:event.registration.badge,title:0
+msgid "Title"
+msgstr ""
+
+#. module: event
+#: field:event.event,mail_registr:0
+msgid "Registration Email"
+msgstr ""
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_event_confirm_registration
+msgid "Make Invoices"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+msgid "Registration Date"
+msgstr ""
+
+#. module: event
+#: help:event.event,main_speaker_id:0
+msgid "Speaker who are giving speech on event."
+msgstr ""
+
+#. module: event
+#: view:partner.event.registration:0
+msgid "_Close"
+msgstr ""
+
+#. module: event
+#: model:event.event,name:event.event_0
+msgid "Concert of Bon Jovi"
+msgstr ""
+
+#. module: event
+#: help:event.event,unit_price:0
+msgid ""
+"This will be the default price used as registration cost when invoicing this "
+"event. Note that you can specify for each registration a specific amount if "
+"you want to"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "March"
+msgstr "Marts"
+
+#. module: event
+#: field:event.event,mail_confirm:0
+msgid "Confirmation Email"
+msgstr ""
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:63
+#, python-format
+msgid "Registration doesn't have any partner to invoice."
+msgstr ""
+
+#. module: event
+#: field:event.event,company_id:0
+#: field:event.registration,company_id:0
+#: view:report.event.registration:0
+#: field:report.event.registration,company_id:0
+msgid "Company"
+msgstr "Virksomhed"
+
+#. module: event
+#: field:event.make.invoice,invoice_date:0
+msgid "Invoice Date"
+msgstr "Faktura dato"
+
+#. module: event
+#: code:addons/event/wizard/partner_event_registration.py:93
+#: view:event.registration:0
+#: model:ir.actions.act_window,name:event.action_partner_event_registration
+#: model:ir.model,name:event.model_event_registration
+#: view:partner.event.registration:0
+#, python-format
+msgid "Event Registration"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Last 7 Days"
+msgstr "Seneste 7 dage"
+
+#. module: event
+#: field:event.event,parent_id:0
+msgid "Parent Event"
+msgstr ""
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_make_invoices
+msgid "Make Invoice"
+msgstr ""
+
+#. module: event
+#: field:event.registration,price_subtotal:0
+msgid "Subtotal"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Event on Registration"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Current Events"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Add Internal Note"
+msgstr ""
+
+#. module: event
+#: model:ir.actions.act_window,name:event.action_report_event_registration
+#: model:ir.model,name:event.model_report_event_registration
+#: model:ir.ui.menu,name:event.menu_report_event_registration
+#: view:report.event.registration:0
+msgid "Events Analysis"
+msgstr ""
+
+#. module: event
+#: field:event.registration,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: event
+#: field:event.event,mail_auto_confirm:0
+msgid "Mail Auto Confirm"
+msgstr ""
+
+#. module: event
+#: model:product.template,name:event.event_product_1_product_template
+msgid "Ticket for Opera"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:122
+#: view:event.event:0
+#, python-format
+msgid "Confirm Event"
+msgstr ""
+
+#. module: event
+#: selection:event.event,state:0
+#: selection:event.registration,state:0
+#: selection:report.event.registration,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: event
+#: field:event.event,reply_to:0
+msgid "Reply-To"
+msgstr "Svar til"
+
+#. module: event
+#: model:ir.actions.act_window,name:event.open_board_associations_manager
+msgid "Event Dashboard"
+msgstr ""
+
+#. module: event
+#: model:event.event,name:event.event_1
+msgid "Opera of Verdi"
+msgstr ""
+
+#. module: event
+#: field:event.event,pricelist_id:0
+msgid "Pricelist"
+msgstr "Prisliste"
+
+#. module: event
+#: field:event.registration,contact_id:0
+msgid "Partner Contact"
+msgstr ""
+
+#. module: event
+#: model:ir.model,name:event.model_event_registration_badge
+msgid "event.registration.badge"
+msgstr ""
+
+#. module: event
+#: field:event.registration,ref:0
+msgid "Reference"
+msgstr ""
+
+#. module: event
+#: help:event.event,date_end:0
+#: help:partner.event.registration,end_date:0
+msgid "Closing Date of Event"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Emails"
+msgstr "E-mails"
+
+#. module: event
+#: view:event.registration:0
+msgid "Extra Info"
+msgstr "Ekstra information"
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:83
+#, python-format
+msgid "Customer Invoices"
+msgstr ""
+
+#. module: event
+#: selection:event.event,state:0
+#: selection:report.event.registration,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: event
+#: field:event.type,name:0
+msgid "Event type"
+msgstr ""
+
+#. module: event
+#: model:ir.model,name:event.model_event_type
+msgid " Event Type "
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: field:event.registration,event_id:0
+#: model:ir.model,name:event.model_event_event
+#: model:ir.module.module,shortdesc:event.module_meta_information
+#: field:partner.event.registration,event_id:0
+#: view:report.event.registration:0
+#: field:report.event.registration,event_id:0
+#: view:res.partner:0
+msgid "Event"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+#: field:event.registration,badge_ids:0
+msgid "Badges"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: selection:event.event,state:0
+#: view:event.registration:0
+#: selection:event.registration,state:0
+#: selection:report.event.registration,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: event
+#: view:event.confirm.registration:0
+msgid "Registration Confirmation"
+msgstr ""
+
+#. module: event
+#: help:event.event,pricelist_id:0
+msgid "Pricelist version for current event."
+msgstr ""
+
+#. module: event
+#: help:event.event,product_id:0
+msgid ""
+"The invoices of this event registration will be created with this Product. "
+"Thus it allows you to set the default label and the accounting info you want "
+"by default on these invoices."
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Misc"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: field:event.event,speaker_ids:0
+msgid "Other Speakers"
+msgstr ""
+
+#. module: event
+#: model:ir.model,name:event.model_event_make_invoice
+msgid "Event Make Invoice"
+msgstr ""
+
+#. module: event
+#: help:event.registration,nb_register:0
+msgid "Number of Registrations or Tickets"
+msgstr ""
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:50
+#: code:addons/event/wizard/event_make_invoice.py:54
+#: code:addons/event/wizard/event_make_invoice.py:58
+#: code:addons/event/wizard/event_make_invoice.py:62
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Send New Email"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Location"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Reply"
+msgstr ""
+
+#. module: event
+#: field:event.event,register_current:0
+#: view:report.event.registration:0
+msgid "Confirmed Registrations"
+msgstr ""
+
+#. module: event
+#: field:event.event,mail_auto_registr:0
+msgid "Mail Auto Register"
+msgstr ""
+
+#. module: event
+#: field:event.event,type:0
+#: field:partner.event.registration,event_type:0
+msgid "Type"
+msgstr ""
+
+#. module: event
+#: field:event.registration,email_from:0
+msgid "Email"
+msgstr "E-mail"
+
+#. module: event
+#: field:event.registration,tobe_invoiced:0
+msgid "To be Invoiced"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:394
+#, python-format
+msgid "Error !"
+msgstr "Fejl!"
+
+#. module: event
+#: field:event.registration,create_date:0
+msgid "Creation Date"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: view:res.partner:0
+msgid "Cancel Registration"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:395
+#, python-format
+msgid "Registered partner doesn't have an address to make the invoice."
+msgstr ""
+
+#. module: event
+#: field:event.registration,nb_register:0
+msgid "Quantity"
+msgstr ""
+
+#. module: event
+#: help:event.event,type:0
+msgid "Type of Event like Seminar, Exhibition, Conference, Training."
+msgstr ""
+
+#. module: event
+#: help:event.event,mail_confirm:0
+msgid ""
+"This email will be sent when the event gets confimed or when someone "
+"subscribes to a confirmed event. This is also the email sent to remind "
+"someone about the event."
+msgstr ""
+
+#. module: event
+#: help:event.event,register_prospect:0
+msgid "Total of Prospect Registrati./event/event.py:41:ons"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "July"
+msgstr "Juli"
+
+#. module: event
+#: view:event.event:0
+msgid "Event Organization"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "History Information"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Dates"
+msgstr "Datoer"
+
+#. module: event
+#: view:event.confirm:0
+#: view:event.confirm.registration:0
+msgid "Confirm Anyway"
+msgstr ""
+
+#. module: event
+#: code:addons/event/wizard/event_confirm_registration.py:54
+#, python-format
+msgid "Warning: The Event '%s' has reached its Maximum Limit (%s)."
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: field:event.registration.badge,registration_id:0
+#: model:ir.actions.act_window,name:event.act_event_list_register_event
+msgid "Registration"
+msgstr ""
+
+#. module: event
+#: field:report.event.registration,nbevent:0
+msgid "Number Of Events"
+msgstr ""
+
+#. module: event
+#: help:event.event,state:0
+msgid ""
+"If event is created, the state is 'Draft'.If event is confirmed for the "
+"particular dates the state is set to 'Confirmed'. If the event is over, the "
+"state is set to 'Done'.If event is cancelled the state is set to 'Cancelled'."
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Cancel Event"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+msgid "Contact"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Last 30 Days"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: field:event.registration,partner_id:0
+#: model:ir.model,name:event.model_res_partner
+msgid "Partner"
+msgstr ""
+
+#. module: event
+#: view:board.board:0
+#: model:ir.actions.act_window,name:event.act_event_reg
+#: view:report.event.registration:0
+msgid "Events Filling Status"
+msgstr ""
+
+#. module: event
+#: field:event.make.invoice,grouped:0
+msgid "Group the invoices"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Mailing"
+msgstr ""
+
+#. module: event
+#: model:product.template,name:event.event_product_0_product_template
+msgid "Ticket for Concert"
+msgstr ""
+
+#. module: event
+#: view:board.board:0
+#: field:event.event,register_prospect:0
+msgid "Unconfirmed Registrations"
+msgstr ""
+
+#. module: event
+#: field:event.registration,partner_invoice_id:0
+msgid "Partner Invoiced"
+msgstr ""
+
+#. module: event
+#: field:event.registration,log_ids:0
+msgid "Logs"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: field:event.event,state:0
+#: view:event.registration:0
+#: field:event.registration,state:0
+#: view:report.event.registration:0
+#: field:report.event.registration,state:0
+msgid "State"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "September"
+msgstr "September"
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "December"
+msgstr "December"
+
+#. module: event
+#: field:event.registration,event_product:0
+msgid "Invoice Name"
+msgstr ""
+
+#. module: event
+#: field:report.event.registration,draft_state:0
+msgid " # No of Draft Registrations"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+#: field:report.event.registration,month:0
+msgid "Month"
+msgstr "Måned"
+
+#. module: event
+#: view:event.event:0
+msgid "Event Done"
+msgstr ""
+
+#. module: event
+#: model:ir.module.module,description:event.module_meta_information
+msgid ""
+"Organization and management of Event.\n"
+"\n"
+" This module allow you\n"
+" * to manage your events and their registrations\n"
+" * to use emails to automatically confirm and send acknowledgements "
+"for any registration to an event\n"
+" * ...\n"
+" A dashboard for associations that includes:\n"
+" * Registration by Events (graph)\n"
+" Note that:\n"
+" - You can define new types of events in\n"
+" Events / Configuration / Types of Events\n"
+" - You can access predefined reports about number of registration per "
+"event or per event category in:\n"
+" Events / Reporting\n"
+msgstr ""
+
+#. module: event
+#: field:event.confirm.registration,msg:0
+msgid "Message"
+msgstr ""
+
+#. module: event
+#: constraint:event.event:0
+msgid "Error ! You cannot create recursive event."
+msgstr ""
+
+#. module: event
+#: field:event.registration,ref2:0
+msgid "Reference 2"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:357
+#: view:report.event.registration:0
+#, python-format
+msgid "Invoiced"
+msgstr "Faktureret"
+
+#. module: event
+#: view:event.event:0
+#: view:report.event.registration:0
+msgid "My Events"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Speakers"
+msgstr ""
+
+#. module: event
+#: view:event.make.invoice:0
+msgid "Create invoices"
+msgstr ""
+
+#. module: event
+#: help:event.registration,email_cc:0
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
+msgstr ""
+
+#. module: event
+#: constraint:res.partner:0
+msgid "Error ! You can not create recursive associated members."
+msgstr ""
+
+#. module: event
+#: view:event.make.invoice:0
+msgid "Do you really want to create the invoice(s) ?"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Beginning Date"
+msgstr ""
+
+#. module: event
+#: field:event.registration,date_closed:0
+msgid "Closed"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: model:ir.actions.act_window,name:event.action_event_view
+#: model:ir.ui.menu,name:event.menu_board_associations_manager
+#: model:ir.ui.menu,name:event.menu_event_event
+#: model:ir.ui.menu,name:event.menu_event_event_assiciation
+#: view:res.partner:0
+msgid "Events"
+msgstr ""
+
+#. module: event
+#: field:partner.event.registration,nb_register:0
+msgid "Number of Registration"
+msgstr ""
+
+#. module: event
+#: field:event.event,child_ids:0
+msgid "Child Events"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "August"
+msgstr "August"
+
+#. module: event
+#: field:res.partner,event_ids:0
+#: field:res.partner,event_registration_ids:0
+msgid "unknown"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "June"
+msgstr "Juni"
+
+#. module: event
+#: help:event.event,mail_auto_registr:0
+msgid ""
+"Check this box if you want to use the automatic mailing for new registration"
+msgstr ""
+
+#. module: event
+#: field:event.registration,write_date:0
+msgid "Write Date"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "My Registrations"
+msgstr ""
+
+#. module: event
+#: view:event.confirm:0
+msgid ""
+"Warning: This Event has not reached its Minimum Registration Limit. Are you "
+"sure you want to confirm it?"
+msgstr ""
+
+#. module: event
+#: field:event.registration,active:0
+msgid "Active"
+msgstr "Aktiv"
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "November"
+msgstr "November"
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Extended Filters..."
+msgstr ""
+
+#. module: event
+#: help:event.event,reply_to:0
+msgid "The email address put in the 'Reply-To' of all emails sent by OpenERP"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "October"
+msgstr "Oktober"
+
+#. module: event
+#: help:event.event,register_current:0
+msgid "Total of Open and Done Registrations"
+msgstr ""
+
+#. module: event
+#: field:event.event,language:0
+msgid "Language"
+msgstr "Sprog"
+
+#. module: event
+#: view:event.registration:0
+#: field:event.registration,email_cc:0
+msgid "CC"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "January"
+msgstr "Januar"
+
+#. module: event
+#: help:event.registration,email_from:0
+msgid "These people will receive email."
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Set To Draft"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:472
+#: view:event.event:0
+#: view:event.registration:0
+#: view:res.partner:0
+#, python-format
+msgid "Confirm Registration"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:report.event.registration:0
+#: view:res.partner:0
+msgid "Date"
+msgstr "Dato"
+
+#. module: event
+#: model:ir.ui.menu,name:event.board_associations
+msgid "Dashboard"
+msgstr "Oversigt"
+
+#. module: event
+#: view:event.event:0
+msgid "Confirmation Email Body"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+#: view:res.partner:0
+msgid "History"
+msgstr ""
+
+#. module: event
+#: field:event.event,address_id:0
+msgid "Location Address"
+msgstr ""
+
+#. module: event
+#: model:ir.ui.menu,name:event.menu_event_type
+#: model:ir.ui.menu,name:event.menu_event_type_association
+msgid "Types of Events"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Attachments"
+msgstr ""
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:59
+#, python-format
+msgid "Event related doesn't have any product defined"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Auto Confirmation Email"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+msgid "Last 365 Days"
+msgstr "Sidste 365 dage"
+
+#. module: event
+#: constraint:event.event:0
+msgid "Error ! Closing Date cannot be set before Beginning Date."
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:442
+#: selection:event.event,state:0
+#: view:event.make.invoice:0
+#: selection:event.registration,state:0
+#: selection:report.event.registration,state:0
+#, python-format
+msgid "Done"
+msgstr ""
+
+#. module: event
+#: field:event.event,date_begin:0
+msgid "Beginning date"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+#: field:event.registration,invoice_id:0
+msgid "Invoice"
+msgstr ""
+
+#. module: event
+#: view:report.event.registration:0
+#: field:report.event.registration,year:0
+msgid "Year"
+msgstr "År"
+
+#. module: event
+#: code:addons/event/event.py:517
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#. module: event
+#: view:event.confirm:0
+#: view:event.confirm.registration:0
+#: view:event.make.invoice:0
+msgid "Close"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Event by Registration"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:432
+#, python-format
+msgid "Open"
+msgstr ""
+
+#. module: event
+#: field:event.event,user_id:0
+msgid "Responsible User"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:538
+#: code:addons/event/event.py:545
+#, python-format
+msgid "Auto Confirmation: [%s] %s"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+#: field:event.registration,user_id:0
+#: view:report.event.registration:0
+#: field:report.event.registration,user_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: event
+#: field:event.event,unit_price:0
+#: view:event.registration:0
+#: field:partner.event.registration,unit_price:0
+msgid "Registration Cost"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.registration:0
+msgid "Current"
+msgstr ""
+
+#. module: event
+#: field:event.registration,unit_price:0
+msgid "Unit Price"
+msgstr "Enhedspris"
+
+#. module: event
+#: view:report.event.registration:0
+#: field:report.event.registration,speaker_id:0
+#: field:res.partner,speaker:0
+msgid "Speaker"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+msgid "Details"
+msgstr ""
+
+#. module: event
+#: model:event.event,name:event.event_2
+msgid "Conference on ERP Buisness"
+msgstr ""
+
+#. module: event
+#: field:event.event,section_id:0
+#: field:event.registration,section_id:0
+#: view:report.event.registration:0
+#: field:report.event.registration,section_id:0
+msgid "Sale Team"
+msgstr ""
+
+#. module: event
+#: field:partner.event.registration,start_date:0
+msgid "Start date"
+msgstr ""
+
+#. module: event
+#: field:event.event,date_end:0
+#: field:partner.event.registration,end_date:0
+msgid "Closing date"
+msgstr ""
+
+#. module: event
+#: field:event.event,product_id:0
+#: view:report.event.registration:0
+#: field:report.event.registration,product_id:0
+msgid "Product"
+msgstr "Vare"
+
+#. module: event
+#: view:event.event:0
+#: field:event.event,note:0
+#: view:event.registration:0
+#: field:event.registration,description:0
+msgid "Description"
+msgstr ""
+
+#. module: event
+#: field:report.event.registration,confirm_state:0
+msgid " # No of Confirmed Registrations"
+msgstr ""
+
+#. module: event
+#: model:ir.actions.act_window,name:event.act_register_event_partner
+msgid "Subscribe"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "May"
+msgstr "Maj"
+
+#. module: event
+#: view:res.partner:0
+msgid "Events Registration"
+msgstr ""
+
+#. module: event
+#: help:event.event,mail_registr:0
+msgid "This email will be sent when someone subscribes to the event."
+msgstr ""
+
+#. module: event
+#: model:product.template,name:event.event_product_2_product_template
+msgid "Ticket for Conference"
+msgstr ""
+
+#. module: event
+#: field:event.registration.badge,address_id:0
+msgid "Address"
+msgstr "Adresse"
+
+#. module: event
+#: view:board.board:0
+#: model:ir.actions.act_window,name:event.act_event_view
+msgid "Next Events"
+msgstr ""
+
+#. module: event
+#: view:partner.event.registration:0
+msgid "_Subcribe"
+msgstr ""
+
+#. module: event
+#: model:ir.model,name:event.model_partner_event_registration
+msgid " event Registration "
+msgstr ""
+
+#. module: event
+#: help:event.event,date_begin:0
+#: help:partner.event.registration,start_date:0
+msgid "Beginning Date of Event"
+msgstr ""
+
+#. module: event
+#: selection:event.registration,state:0
+msgid "Unconfirmed"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:542
+#, python-format
+msgid "Auto Registration: [%s] %s"
+msgstr ""
+
+#. module: event
+#: field:event.registration,date_deadline:0
+msgid "End Date"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "February"
+msgstr "Februar"
+
+#. module: event
+#: view:board.board:0
+msgid "Association Dashboard"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: field:event.registration.badge,name:0
+msgid "Name"
+msgstr ""
+
+#. module: event
+#: help:event.event,mail_auto_confirm:0
+msgid ""
+"Check this box if you want ot use the automatic confirmation emailing or the "
+"reminder"
+msgstr ""
+
+#. module: event
+#: field:event.event,country_id:0
+msgid "Country"
+msgstr "Land"
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:55
+#, python-format
+msgid "Registration is set as Cannot be invoiced"
+msgstr ""
+
+#. module: event
+#: code:addons/event/event.py:500
+#: view:event.event:0
+#: view:event.registration:0
+#: view:res.partner:0
+#, python-format
+msgid "Close Registration"
+msgstr ""
+
+#. module: event
+#: selection:report.event.registration,month:0
+msgid "April"
+msgstr "April"
+
+#. module: event
+#: field:event.event,name:0
+#: field:event.registration,name:0
+msgid "Summary"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: view:event.type:0
+#: view:report.event.registration:0
+#: field:report.event.registration,type:0
+msgid "Event Type"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+#: field:event.event,registration_ids:0
+#: model:ir.actions.act_window,name:event.action_registration
+#: model:ir.ui.menu,name:event.menu_action_registration
+#: model:ir.ui.menu,name:event.menu_action_registration_association
+msgid "Registrations"
+msgstr ""
+
+#. module: event
+#: field:event.registration,date:0
+msgid "Start Date"
+msgstr ""
+
+#. module: event
+#: field:event.event,register_max:0
+#: field:report.event.registration,register_max:0
+msgid "Maximum Registrations"
+msgstr ""
+
+#. module: event
+#: field:report.event.registration,date:0
+msgid "Event Start Date"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Registration Email Body"
+msgstr ""
+
+#. module: event
+#: view:partner.event.registration:0
+msgid "Event For Registration"
+msgstr ""
+
+#. module: event
+#: code:addons/event/wizard/event_make_invoice.py:51
+#, python-format
+msgid "Invoice cannot be created if the registration is in %s state."
+msgstr ""
+
+#. module: event
+#: view:event.confirm:0
+#: model:ir.actions.act_window,name:event.action_event_confirm
+#: model:ir.model,name:event.model_event_confirm
+msgid "Event Confirmation"
+msgstr ""
+
+#. module: event
+#: view:event.event:0
+msgid "Auto Registration Email"
+msgstr ""
+
+#. module: event
+#: view:event.registration:0
+#: view:report.event.registration:0
+#: field:report.event.registration,total:0
+msgid "Total"
+msgstr ""
+
+#. module: event
+#: help:event.event,register_min:0
+msgid "Providee Minimum Number of Registrations"
+msgstr ""
+
+#. module: event
+#: field:event.event,speaker_confirmed:0
+msgid "Speaker Confirmed"
+msgstr ""
+
+#. module: event
+#: model:ir.actions.act_window,help:event.action_event_view
+msgid ""
+"Event is the low level object used by meeting and others documents that "
+"should be synchronized with mobile devices or calendar applications through "
+"caldav. Most of the users should work in the Calendar menu, and not in the "
+"list of events."
+msgstr ""
diff --git a/addons/event/report/report_event_registration_view.xml b/addons/event/report/report_event_registration_view.xml
index 11d8592350b..3fd24c0a366 100644
--- a/addons/event/report/report_event_registration_view.xml
+++ b/addons/event/report/report_event_registration_view.xml
@@ -53,21 +53,24 @@
-
-
-
+
+
+
+
+ string="Confirm"
+ domain="[('state','=','confirm')]"
+ help="Events which are in confirm state"/>
).
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
#
# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,6 +18,3 @@
# along with this program. If not, see .
#
##############################################################################
-
-import report_margin
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/fetchmail_crm/__openerp__.py b/addons/fetchmail_crm/__openerp__.py
new file mode 100644
index 00000000000..2be9920ee83
--- /dev/null
+++ b/addons/fetchmail_crm/__openerp__.py
@@ -0,0 +1,39 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ "name" : "Fetchmail for CRM",
+ "version" : "1.0",
+ "depends" : ["fetchmail", "crm"],
+ "author" : "OpenERP SA",
+ "category": 'Tools',
+ "description": """
+ """,
+ 'website': 'http://www.openerp.com',
+ 'init_xml': [],
+ 'update_xml': [
+ "installer.xml",
+ ],
+ 'demo_xml': [
+ ],
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/fetchmail_crm/installer.xml b/addons/fetchmail_crm/installer.xml
new file mode 100644
index 00000000000..def954eb286
--- /dev/null
+++ b/addons/fetchmail_crm/installer.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Create Leads from Email Account
+ ir.actions.act_window
+ fetchmail.server
+ form
+ form
+ {'default_name' : "Email Account For Leads", 'fetchmail_model' : 'crm.lead'}
+
+
+
+
+
+
+
+
diff --git a/addons/fetchmail_crm_claim/__init__.py b/addons/fetchmail_crm_claim/__init__.py
new file mode 100644
index 00000000000..5831b3284bb
--- /dev/null
+++ b/addons/fetchmail_crm_claim/__init__.py
@@ -0,0 +1,20 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
diff --git a/addons/fetchmail_crm_claim/__openerp__.py b/addons/fetchmail_crm_claim/__openerp__.py
new file mode 100644
index 00000000000..b8f0fa24470
--- /dev/null
+++ b/addons/fetchmail_crm_claim/__openerp__.py
@@ -0,0 +1,39 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ "name" : "Fetchmail for CRM Claim",
+ "version" : "1.0",
+ "depends" : ["fetchmail", "crm_claim"],
+ "author" : "OpenERP SA",
+ "category": 'Tools',
+ "description": """
+ """,
+ 'website': 'http://www.openerp.com',
+ 'init_xml': [],
+ 'update_xml': [
+ "installer.xml",
+ ],
+ 'demo_xml': [
+ ],
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/fetchmail_crm_claim/installer.xml b/addons/fetchmail_crm_claim/installer.xml
new file mode 100644
index 00000000000..232d95f6ea2
--- /dev/null
+++ b/addons/fetchmail_crm_claim/installer.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Create Claims from Email Account
+ ir.actions.act_window
+ fetchmail.server
+ form
+ form
+ {'default_name' : "Email Account For Claims", 'fetchmail_model' : 'crm.claim'}
+
+
+
+
+
+
+
+
diff --git a/addons/fetchmail_hr_recruitment/__init__.py b/addons/fetchmail_hr_recruitment/__init__.py
new file mode 100644
index 00000000000..5831b3284bb
--- /dev/null
+++ b/addons/fetchmail_hr_recruitment/__init__.py
@@ -0,0 +1,20 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
diff --git a/addons/fetchmail_hr_recruitment/__openerp__.py b/addons/fetchmail_hr_recruitment/__openerp__.py
new file mode 100644
index 00000000000..fd5b8346227
--- /dev/null
+++ b/addons/fetchmail_hr_recruitment/__openerp__.py
@@ -0,0 +1,39 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ "name" : "Fetchmail for Applicants",
+ "version" : "1.0",
+ "depends" : ["fetchmail", "hr_recruitment"],
+ "author" : "OpenERP SA",
+ "category": 'Tools',
+ "description": """
+ """,
+ 'website': 'http://www.openerp.com',
+ 'init_xml': [],
+ 'update_xml': [
+ "installer.xml",
+ ],
+ 'demo_xml': [
+ ],
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/fetchmail_hr_recruitment/installer.xml b/addons/fetchmail_hr_recruitment/installer.xml
new file mode 100644
index 00000000000..f9dc497f357
--- /dev/null
+++ b/addons/fetchmail_hr_recruitment/installer.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Create Applicants from Email Account
+ ir.actions.act_window
+ fetchmail.server
+ form
+ form
+ {'default_name' : "Email Account For Applicant", 'fetchmail_model' : 'hr.applicant'}
+
+
+
+
+
+
+
+
diff --git a/addons/fetchmail_project_issue/__init__.py b/addons/fetchmail_project_issue/__init__.py
new file mode 100644
index 00000000000..5831b3284bb
--- /dev/null
+++ b/addons/fetchmail_project_issue/__init__.py
@@ -0,0 +1,20 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
diff --git a/addons/fetchmail_project_issue/__openerp__.py b/addons/fetchmail_project_issue/__openerp__.py
new file mode 100644
index 00000000000..641012fc9ab
--- /dev/null
+++ b/addons/fetchmail_project_issue/__openerp__.py
@@ -0,0 +1,39 @@
+#-*- coding:utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2011 OpenERP S.A. (). All Rights Reserved
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ "name" : "Fetchmail for Project Issue",
+ "version" : "1.0",
+ "depends" : ["fetchmail", "project_issue"],
+ "author" : "OpenERP SA",
+ "category": 'Tools',
+ "description": """
+ """,
+ 'website': 'http://www.openerp.com',
+ 'init_xml': [],
+ 'update_xml': [
+ "installer.xml",
+ ],
+ 'demo_xml': [
+ ],
+ 'installable': True,
+ 'active': False,
+}
diff --git a/addons/fetchmail_project_issue/installer.xml b/addons/fetchmail_project_issue/installer.xml
new file mode 100644
index 00000000000..300ffdc22d1
--- /dev/null
+++ b/addons/fetchmail_project_issue/installer.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ Create Issues from Email Account
+ ir.actions.act_window
+ fetchmail.server
+ form
+ form
+ {'default_name' : "Email Account For Issue", 'fetchmail_model' : 'project.issue'}
+
+
+
+
+
+
+
+
diff --git a/addons/hr/hr_installer.xml b/addons/hr/hr_installer.xml
index 6aae7a3ac85..bd6e7ed3f6b 100644
--- a/addons/hr/hr_installer.xml
+++ b/addons/hr/hr_installer.xml
@@ -1,49 +1,66 @@
-
+
-
- hr.installer.view
- base.setup.installer
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HR Management
- 5
-
+
+ hr.installer.view
+ base.setup.installer
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- Create your employees
- ir.actions.act_window
- hr.employee
- form
- form
-
-
+
+ HR Management
+ 5
+
-
-
-
-
+
+
+ Create your employees
+ ir.actions.act_window
+ hr.employee
+ form
+ form
+
+
-
+
+
+
+
+
+
+
+ Define Your Department Structure
+ ir.actions.act_window
+ hr.department
+ form
+ tree,form
+
+ Your Company's Department Structure is used to manage all documents related to employees by departments: expenses and timesheet validation, leaves management, recruitments, etc.
+
+
+
+
+
+ 3
+
+
+
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index fb10baedc9e..87a9da2cc6e 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -346,9 +346,10 @@
search
-
-
+
diff --git a/addons/hr_attendance/hr_attendance_view.xml b/addons/hr_attendance/hr_attendance_view.xml
index 0affdde9e73..7a65ce7f88c 100644
--- a/addons/hr_attendance/hr_attendance_view.xml
+++ b/addons/hr_attendance/hr_attendance_view.xml
@@ -52,7 +52,7 @@
-
+
diff --git a/addons/hr_contract/hr_contract.py b/addons/hr_contract/hr_contract.py
index 3a6ea844012..4f82d1b3014 100644
--- a/addons/hr_contract/hr_contract.py
+++ b/addons/hr_contract/hr_contract.py
@@ -63,7 +63,7 @@ class hr_contract(osv.osv):
_name = 'hr.contract'
_description = 'Contract'
_columns = {
- 'name': fields.char('Contract Reference', size=32, required=True),
+ 'name': fields.char('Contract Reference', size=64, required=True),
'employee_id': fields.many2one('hr.employee', "Employee", required=True),
'department_id': fields.related('employee_id','department_id', type='many2one', relation='hr.department', string="Department", readonly=True),
'type_id': fields.many2one('hr.contract.type', "Contract Type", required=True),
diff --git a/addons/hr_evaluation/__openerp__.py b/addons/hr_evaluation/__openerp__.py
index adf1d9d69c4..95ef4512d5c 100644
--- a/addons/hr_evaluation/__openerp__.py
+++ b/addons/hr_evaluation/__openerp__.py
@@ -47,8 +47,8 @@ in the form of pdf file. Implements a dashboard for My Current Evaluations
"hr_evaluation_view.xml",
"report/hr_evaluation_report_view.xml",
"board_hr_evaluation_view.xml",
- 'hr_evaluation_installer_view.xml',
'hr_evaluation_data.xml',
+ 'hr_evaluation_installer.xml',
],
"test": ["test/test_hr_evaluation.yml"],
"active": False,
diff --git a/addons/hr_evaluation/hr_evaluation.py b/addons/hr_evaluation/hr_evaluation.py
index 7634052704c..d79cf90b915 100644
--- a/addons/hr_evaluation/hr_evaluation.py
+++ b/addons/hr_evaluation/hr_evaluation.py
@@ -158,7 +158,7 @@ class hr_evaluation(osv.osv):
'survey_request_ids': fields.one2many('hr.evaluation.interview','evaluation_id','Appraisal Forms'),
'plan_id': fields.many2one('hr_evaluation.plan', 'Plan', required=True),
'state': fields.selection([
- ('draft','Draft'),
+ ('draft','New'),
('wait','Plan In Progress'),
('progress','Waiting Appreciation'),
('done','Done'),
diff --git a/addons/hr_evaluation/hr_evaluation_installer.xml b/addons/hr_evaluation/hr_evaluation_installer.xml
new file mode 100644
index 00000000000..4ef0013a4c2
--- /dev/null
+++ b/addons/hr_evaluation/hr_evaluation_installer.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Review Evaluation Plans
+ ir.actions.act_window
+ hr_evaluation.plan
+ form
+ form,tree
+
+
+
+
+
+
+
+
diff --git a/addons/hr_evaluation/hr_evaluation_installer_view.xml b/addons/hr_evaluation/hr_evaluation_installer_view.xml
deleted file mode 100644
index 27dd0945553..00000000000
--- a/addons/hr_evaluation/hr_evaluation_installer_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- Define Your Department Structure
- ir.actions.act_window
- hr.department
- form
- tree,form
-
- Your Company's Department Structure is used to manage all documents related to employees by departments: expenses and timesheet validation, leaves management, recruitments, etc.
-
-
-
-
-
- 3
-
-
-
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index e5a3d0ac818..2736785b1fe 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -201,7 +201,7 @@
-
+
-
+
-
+
@@ -136,8 +136,7 @@
-
-
+
-
-
+
@@ -84,7 +83,7 @@
-
+
@@ -127,7 +126,7 @@
-
+
@@ -446,7 +445,7 @@
- Assign Legal Leaves to Employees
+ Allocate Leaves for Employeesir.actions.act_windowhr.employeeform
diff --git a/addons/hr_payroll/security/ir.model.access.csv b/addons/hr_payroll/security/ir.model.access.csv
index d19ec411d5d..4d2afff54c3 100644
--- a/addons/hr_payroll/security/ir.model.access.csv
+++ b/addons/hr_payroll/security/ir.model.access.csv
@@ -13,3 +13,4 @@
"access_hr_payslip_run","hr.payslip.run","model_hr_payslip_run","base.group_hr_manager",1,1,1,1
"access_hr_payslip_input","hr.payslip.input","model_hr_payslip_input","base.group_hr_manager",1,1,1,1
"access_hr_rule_input","hr.rule.input","model_hr_rule_input","base.group_hr_manager",1,1,1,1
+"access_hr_salary_rule_user","hr.salary.rule.user","model_hr_salary_rule","base.group_hr_user",1,1,1,1
\ No newline at end of file
diff --git a/addons/hr_payroll_account/hr_payroll_account.py b/addons/hr_payroll_account/hr_payroll_account.py
index 8e4e73458f2..a2c2a4129a8 100644
--- a/addons/hr_payroll_account/hr_payroll_account.py
+++ b/addons/hr_payroll_account/hr_payroll_account.py
@@ -125,7 +125,7 @@ class hr_payslip(osv.osv):
debit_sum += debit_line[2]['debit'] - debit_line[2]['credit']
if credit_account_id:
line_ids.append(credit_line)
- credit_sum += credit_line[2]['credit'] - credit_line['debit']
+ credit_sum += credit_line[2]['credit'] - credit_line[2]['debit']
if debit_sum > credit_sum:
adjust_credit = (0, 0, {
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index 9ad7180441c..77a1bcb7b8f 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -443,6 +443,12 @@ class hr_applicant(crm.crm_case, osv.osv):
self.write(cr, uid, ids, {'date_open': False, 'date_closed': False})
return res
+ def write(self, cr, uid, ids, vals, context=None):
+ if 'stage_id' in vals and vals['stage_id']:
+ stage = self.pool.get('hr.recruitment.stage').browse(cr, uid, vals['stage_id'], context=context)
+ text = _("Changed Stage to: %s") % stage.name
+ self.message_append(cr, uid, ids, text, body_text=text, context=context)
+ return super(hr_applicant,self).write(cr, uid, ids, vals, context=context)
hr_applicant()
diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml
index 9fafbaf1e03..a1d271c01c8 100644
--- a/addons/hr_recruitment/hr_recruitment_data.xml
+++ b/addons/hr_recruitment/hr_recruitment_data.xml
@@ -88,7 +88,6 @@
Job Survey
- draft20
diff --git a/addons/hr_recruitment/hr_recruitment_installer_view.xml b/addons/hr_recruitment/hr_recruitment_installer_view.xml
index 5fdf1df849a..3d7d49d595e 100644
--- a/addons/hr_recruitment/hr_recruitment_installer_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_installer_view.xml
@@ -1,19 +1,19 @@
-
-
- Review Recruitment Stages
- ir.actions.act_window
- hr.recruitment.stage
- form
- tree,form
- Check if the following stages are matching your recruitment process. Don't forget to specify the department if your recruitment process is different according to the job position.
-
-
+
+
+ Review Recruitment Stages
+ ir.actions.act_window
+ hr.recruitment.stage
+ form
+ tree,form
+ Check if the following stages are matching your recruitment process. Don't forget to specify the department if your recruitment process is different according to the job position.
+
+
-
-
-
- 3
-
+
+
+
+ 3
+
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index fce529731fc..8dd5e171206 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -132,7 +132,7 @@
-
+
@@ -172,7 +172,7 @@
icon="terp-mail-replied" type="action"/>
-
+
@@ -217,12 +217,6 @@
search
-
-
+
+
+
+ Define your Analytic Structure
+ ir.actions.act_window
+ account.analytic.account
+ form
+ tree,form
+
+
+
+
+
+
+
+
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
index 66975695814..0e056b81e61 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_final_invoice_create.py
@@ -126,6 +126,8 @@ class final_invoice_create(osv.osv_memory):
taxes = []
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
+ if not account_id:
+ raise osv.except_osv(_("Configuration Error"), _("No income account defined for product '%s'") % product.name)
curr_line = {
'price_unit': -amount,
'quantity': 1.0,
@@ -146,6 +148,8 @@ class final_invoice_create(osv.osv_memory):
taxes = product.taxes_id
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
+ if not account_id:
+ raise osv.except_osv(_("Configuration Error"), _("No income account defined for product '%s'") % product.name)
curr_line = {
'price_unit': account.amount_max - amount_total,
'quantity': 1.0,
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index 4372a19a89a..502d35ff2d1 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -155,6 +155,8 @@ class hr_timesheet_invoice_create(osv.osv_memory):
taxes = product.taxes_id
tax = fiscal_pos_obj.map_tax(cr, uid, account.partner_id.property_account_position, taxes)
account_id = product.product_tmpl_id.property_account_income.id or product.categ_id.property_account_income_categ.id
+ if not account_id:
+ raise osv.except_osv(_("Configuration Error"), _("No income account defined for product '%s'") % product.name)
curr_line = {
'price_unit': price,
'quantity': qty,
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index 8f5c9638a53..1983b75d3f6 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -321,10 +321,10 @@ class hr_timesheet_sheet(osv.osv):
return time.strftime('%Y-12-31')
return time.strftime('%Y-%m-%d')
- def _default_employee(self,cr, uid, context=None):
+ def _default_employee(self, cr, uid, context=None):
emp_ids = self.pool.get('hr.employee').search(cr, uid, [('user_id','=',uid)], context=context)
return emp_ids and emp_ids[0] or False
-
+
_defaults = {
'date_from' : _default_date_from,
'date_current' : lambda *a: time.strftime('%Y-%m-%d'),
@@ -382,6 +382,12 @@ class hr_timesheet_sheet(osv.osv):
raise osv.except_osv(_('Invalid action !'), _('You cannot delete a timesheet which have attendance entries!'))
return super(hr_timesheet_sheet, self).unlink(cr, uid, ids, context=context)
+ def onchange_employee_id(self, cr, uid, ids, employee_id, context=None):
+ department_id = False
+ if employee_id:
+ department_id = self.pool.get('hr.employee').browse(cr, uid, employee_id, context=context).department_id.id
+ return {'value': {'department_id': department_id}}
+
hr_timesheet_sheet()
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index 87f212112c5..0e97577298e 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -62,7 +62,7 @@
-
+
@@ -143,8 +143,8 @@
-
-
+
+
diff --git a/addons/html_view/i18n/da.po b/addons/html_view/i18n/da.po
new file mode 100644
index 00000000000..91bd304d59b
--- /dev/null
+++ b/addons/html_view/i18n/da.po
@@ -0,0 +1,63 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:15+0000\n"
+"PO-Revision-Date: 2011-09-24 09:55+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-25 04:41+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: html_view
+#: field:html.view,name:0
+msgid "Name"
+msgstr ""
+
+#. module: html_view
+#: field:html.view,comp_id:0
+msgid "Company"
+msgstr "Virksomhed"
+
+#. module: html_view
+#: model:ir.actions.act_window,name:html_view.action_html_view_form
+#: model:ir.ui.menu,name:html_view.html_form
+msgid "Html Test"
+msgstr "HTML test"
+
+#. module: html_view
+#: view:html.view:0
+msgid "Html Example"
+msgstr ""
+
+#. module: html_view
+#: model:ir.module.module,shortdesc:html_view.module_meta_information
+msgid "Html View"
+msgstr ""
+
+#. module: html_view
+#: field:html.view,bank_ids:0
+msgid "Banks"
+msgstr ""
+
+#. module: html_view
+#: model:ir.module.module,description:html_view.module_meta_information
+msgid ""
+"\n"
+" This is the test module which shows html tag supports in normal xml form "
+"view.\n"
+" "
+msgstr ""
+
+#. module: html_view
+#: model:ir.model,name:html_view.model_html_view
+msgid "html.view"
+msgstr ""
diff --git a/addons/idea/idea.py b/addons/idea/idea.py
index 49d0cbca155..7645b17a348 100644
--- a/addons/idea/idea.py
+++ b/addons/idea/idea.py
@@ -185,7 +185,7 @@ class idea_idea(osv.osv):
'count_votes': fields.function(_vote_count, string="Count of votes", type="integer"),
'count_comments': fields.function(_comment_count, string="Count of comments", type="integer"),
'category_id': fields.many2one('idea.category', 'Category', required=True, readonly=True, states={'draft':[('readonly',False)]}),
- 'state': fields.selection([('draft', 'Draft'),
+ 'state': fields.selection([('draft', 'New'),
('open', 'Opened'),
('close', 'Accepted'),
('cancel', 'Refused')],
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index 59111a11d04..4ac27fee51f 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -247,7 +247,7 @@
-
+
@@ -289,8 +289,9 @@
-
-
+
+
diff --git a/addons/idea/report/report_vote_view.xml b/addons/idea/report/report_vote_view.xml
index eb5cfe3c28b..8e4a8ae2abb 100644
--- a/addons/idea/report/report_vote_view.xml
+++ b/addons/idea/report/report_vote_view.xml
@@ -40,17 +40,10 @@
domain="[('date','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
help="Idea Vote created last month"/>
-
-
-
- 10VAT-OUT-21-S
- VAT 21%
+ VAT 21% - Services
@@ -48,7 +48,7 @@
20VAT-OUT-12-S
- VAT 12%
+ VAT 12% - Services
@@ -90,7 +90,7 @@
30VAT-OUT-06-S
- VAT 6%
+ VAT 6% - Services
@@ -132,7 +132,7 @@
40VAT-OUT-00-S
- VAT 0%
+ VAT 0% - Services0percent
@@ -2070,7 +2070,7 @@
722VAT-IN-V82-CAR-EXC-C2
- Frais de voiture - VAT 50% Deductible
+ Frais de voiture - VAT 50% Deductible (Price Excl.)
@@ -2090,7 +2090,7 @@
723VAT-IN-V82-CAR-EXC-C3
- Frais de voiture - Montant de la note de crédit
+ Frais de voiture - Montant de la note de crédit (Price Excl.)0
diff --git a/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv b/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv
deleted file mode 100644
index a8b6906d244..00000000000
--- a/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_hr_salary_rule_category","hr.salary.rule.category","model_hr_salary_rule_category","base.group_hr_user",1,1,1,1
-"access_hr_salary_rule","hr.salary.rule","model_hr_salary_rule","base.group_hr_user",1,1,1,1
diff --git a/addons/l10n_br/data/account.account.template.csv b/addons/l10n_br/data/account.account.template.csv
index 5657769538c..d0468c68995 100644
--- a/addons/l10n_br/data/account.account.template.csv
+++ b/addons/l10n_br/data/account.account.template.csv
@@ -323,312 +323,312 @@
"account_template_322","3.1","CUSTOS","account_template_321","view","despesa","True"
"account_template_323","3.1.01","CUSTOS DAS MERCADORIAS E PRODUTOS","account_template_322","view","despesa","True"
"account_template_324","3.1.01.01","CUSTOS DAS MERCADORIAS VENDIDAS","account_template_323","view","despesa","True"
-"account_template_325","3.1.01.01.0001","Custo das Mercadorias Vendidas","account_template_324","payable","despesa","True"
+"account_template_325","3.1.01.01.0001","Custo das Mercadorias Vendidas","account_template_324","other","despesa","True"
"account_template_326","3.1.02","CUSTO DOS PRODUTOS VENDIDOS","account_template_322","view","despesa","True"
"account_template_327","3.1.02.01","CUSTO DAS MATÉRIAS PRIMAS","account_template_326","view","despesa","True"
-"account_template_328","3.1.02.01.0001","Custo das Matérias Primas","account_template_327","payable","despesa","True"
+"account_template_328","3.1.02.01.0001","Custo das Matérias Primas","account_template_327","other","despesa","True"
"account_template_329","3.1.02.02","CUSTO DOS PRODUTOS ACABADOS","account_template_326","view","despesa","True"
-"account_template_330","3.1.02.02.0001","Custo dos Produtos Acabados","account_template_329","payable","despesa","True"
+"account_template_330","3.1.02.02.0001","Custo dos Produtos Acabados","account_template_329","other","despesa","True"
"account_template_331","3.1.02.03","CUSTO DE MÃO-DE-OBRA DIRETA","account_template_326","view","despesa","True"
-"account_template_332","3.1.02.03.0001","Salários","account_template_331","payable","despesa","True"
-"account_template_333","3.1.02.03.0002","Horas Extras","account_template_331","payable","despesa","True"
-"account_template_334","3.1.02.03.0003","Adicional Noturno","account_template_331","payable","despesa","True"
-"account_template_335","3.1.02.03.0004","Férias","account_template_331","payable","despesa","True"
-"account_template_336","3.1.02.03.0005","13º Salário","account_template_331","payable","despesa","True"
-"account_template_337","3.1.02.03.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_331","payable","despesa","True"
-"account_template_338","3.1.02.03.0007","Gratificações","account_template_331","payable","despesa","True"
-"account_template_339","3.1.02.03.0008","INSS Empresa","account_template_331","payable","despesa","True"
-"account_template_340","3.1.02.03.0009","FGTS ","account_template_331","payable","despesa","True"
-"account_template_341","3.1.02.03.0010","Adicional Insalubridade","account_template_331","payable","despesa","True"
-"account_template_342","3.1.02.03.0011","Vale Transporte","account_template_331","payable","despesa","True"
-"account_template_343","3.1.02.03.0012","PAT - Programa Alim. Trabalhador","account_template_331","payable","despesa","True"
-"account_template_344","3.1.02.03.0013","Assistência Médica","account_template_331","payable","despesa","True"
-"account_template_345","3.1.02.03.0014","DSR - Descanso Semanal Remunerado","account_template_331","payable","despesa","True"
-"account_template_346","3.1.02.03.0015","Salário Estagiários","account_template_331","payable","despesa","True"
-"account_template_347","3.1.02.03.0016","Previdência Privada","account_template_331","payable","despesa","True"
-"account_template_348","3.1.02.03.0017","Vestuário","account_template_331","payable","despesa","True"
-"account_template_349","3.1.02.03.0018","Assiduidade","account_template_331","payable","despesa","True"
-"account_template_350","3.1.02.03.0019","Abono Salarial","account_template_331","payable","despesa","True"
-"account_template_351","3.1.02.03.0020","Vale Refeição","account_template_331","payable","despesa","True"
-"account_template_352","3.1.02.03.0021","Farmácia","account_template_331","payable","despesa","True"
-"account_template_353","3.1.02.03.0022","Pró-Labore","account_template_331","payable","despesa","True"
+"account_template_332","3.1.02.03.0001","Salários","account_template_331","other","despesa","True"
+"account_template_333","3.1.02.03.0002","Horas Extras","account_template_331","other","despesa","True"
+"account_template_334","3.1.02.03.0003","Adicional Noturno","account_template_331","other","despesa","True"
+"account_template_335","3.1.02.03.0004","Férias","account_template_331","other","despesa","True"
+"account_template_336","3.1.02.03.0005","13º Salário","account_template_331","other","despesa","True"
+"account_template_337","3.1.02.03.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_331","other","despesa","True"
+"account_template_338","3.1.02.03.0007","Gratificações","account_template_331","other","despesa","True"
+"account_template_339","3.1.02.03.0008","INSS Empresa","account_template_331","payable","passivo","True"
+"account_template_340","3.1.02.03.0009","FGTS ","account_template_331","payable","passivo","True"
+"account_template_341","3.1.02.03.0010","Adicional Insalubridade","account_template_331","other","despesa","True"
+"account_template_342","3.1.02.03.0011","Vale Transporte","account_template_331","other","despesa","True"
+"account_template_343","3.1.02.03.0012","PAT - Programa Alim. Trabalhador","account_template_331","other","despesa","True"
+"account_template_344","3.1.02.03.0013","Assistência Médica","account_template_331","other","despesa","True"
+"account_template_345","3.1.02.03.0014","DSR - Descanso Semanal Remunerado","account_template_331","other","despesa","True"
+"account_template_346","3.1.02.03.0015","Salário Estagiários","account_template_331","other","despesa","True"
+"account_template_347","3.1.02.03.0016","Previdência Privada","account_template_331","other","despesa","True"
+"account_template_348","3.1.02.03.0017","Vestuário","account_template_331","other","despesa","True"
+"account_template_349","3.1.02.03.0018","Assiduidade","account_template_331","other","despesa","True"
+"account_template_350","3.1.02.03.0019","Abono Salarial","account_template_331","other","despesa","True"
+"account_template_351","3.1.02.03.0020","Vale Refeição","account_template_331","other","despesa","True"
+"account_template_352","3.1.02.03.0021","Farmácia","account_template_331","other","despesa","True"
+"account_template_353","3.1.02.03.0022","Pró-Labore","account_template_331","other","despesa","True"
"account_template_354","3.1.02.04","GASTOS GERAIS DE FABRICAÇÃO","account_template_326","view","despesa","True"
-"account_template_355","3.1.02.04.0001","Aluguel","account_template_354","payable","despesa","True"
-"account_template_356","3.1.02.04.0002","Água e Esgoto","account_template_354","payable","despesa","True"
-"account_template_357","3.1.02.04.0003","Energia Elétrica","account_template_354","payable","despesa","True"
-"account_template_358","3.1.02.04.0004","Fretes e Carretos","account_template_354","payable","despesa","True"
-"account_template_359","3.1.02.04.0005","Material de Consumo","account_template_354","payable","despesa","True"
-"account_template_360","3.1.02.04.0006","Condução","account_template_354","payable","despesa","True"
-"account_template_361","3.1.02.04.0007","Contribuição Sindical/Assoc.de Classe","account_template_354","payable","despesa","True"
-"account_template_362","3.1.02.04.0008","Material de Limpeza","account_template_354","payable","despesa","True"
-"account_template_363","3.1.02.04.0009","Seguros","account_template_354","payable","despesa","True"
-"account_template_364","3.1.02.04.0010","Viagens e Estadias","account_template_354","payable","despesa","True"
-"account_template_365","3.1.02.04.0011","Manutenção de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_366","3.1.02.04.0012","Depreciações e Amortizações","account_template_354","payable","despesa","True"
-"account_template_367","3.1.02.04.0013","Combustíveis e Lubrificantes","account_template_354","payable","despesa","True"
-"account_template_368","3.1.02.04.0014","Bens de Pequeno Valor","account_template_354","payable","despesa","True"
-"account_template_369","3.1.02.04.0015","Leasing","account_template_354","payable","despesa","True"
-"account_template_370","3.1.02.04.0016","Formação de Pessoal","account_template_354","payable","despesa","True"
-"account_template_371","3.1.02.04.0017","Serviços de Terceiros - Pessoa Jurídica","account_template_354","payable","despesa","True"
-"account_template_372","3.1.02.04.0018","Locação de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_373","3.1.02.04.0019","Feiras/Congressos/Simpósios/Cursos","account_template_354","payable","despesa","True"
-"account_template_374","3.1.02.04.0020","Telefone","account_template_354","payable","despesa","True"
-"account_template_375","3.1.02.04.0021","Comissões sobre Serviços","account_template_354","payable","despesa","True"
-"account_template_376","3.1.02.04.0022","Jornais, Revistas e Periódicos","account_template_354","payable","despesa","True"
-"account_template_377","3.1.02.04.0023","Confraternizações","account_template_354","payable","despesa","True"
-"account_template_378","3.1.02.04.0024","Manutenção de Prédios","account_template_354","payable","despesa","True"
-"account_template_379","3.1.02.04.0025","Brindes e Amostras","account_template_354","payable","despesa","True"
-"account_template_380","3.1.02.04.0026","Aluguel de Equipamentos","account_template_354","payable","despesa","True"
-"account_template_381","3.1.02.04.0027","Serv.de Terceiros P.Física - Autônomos","account_template_354","payable","despesa","True"
-"account_template_382","3.1.02.04.0028","Manutenção de Veículos","account_template_354","payable","despesa","True"
-"account_template_383","3.1.02.04.0029","Despesas de Importação","account_template_354","payable","despesa","True"
-"account_template_384","3.1.02.04.0030","(-) Crédito PIS Não-Cumulativo","account_template_354","payable","despesa","True"
-"account_template_385","3.1.02.04.0031","(-) Crédito Cofins Não-Cumulativo","account_template_354","payable","despesa","True"
+"account_template_355","3.1.02.04.0001","Aluguel","account_template_354","other","despesa","True"
+"account_template_356","3.1.02.04.0002","Água e Esgoto","account_template_354","other","despesa","True"
+"account_template_357","3.1.02.04.0003","Energia Elétrica","account_template_354","other","despesa","True"
+"account_template_358","3.1.02.04.0004","Fretes e Carretos","account_template_354","other","despesa","True"
+"account_template_359","3.1.02.04.0005","Material de Consumo","account_template_354","other","despesa","True"
+"account_template_360","3.1.02.04.0006","Condução","account_template_354","other","despesa","True"
+"account_template_361","3.1.02.04.0007","Contribuição Sindical/Assoc.de Classe","account_template_354","other","despesa","True"
+"account_template_362","3.1.02.04.0008","Material de Limpeza","account_template_354","other","despesa","True"
+"account_template_363","3.1.02.04.0009","Seguros","account_template_354","other","despesa","True"
+"account_template_364","3.1.02.04.0010","Viagens e Estadias","account_template_354","other","despesa","True"
+"account_template_365","3.1.02.04.0011","Manutenção de Equipamentos","account_template_354","other","despesa","True"
+"account_template_366","3.1.02.04.0012","Depreciações e Amortizações","account_template_354","other","despesa","True"
+"account_template_367","3.1.02.04.0013","Combustíveis e Lubrificantes","account_template_354","other","despesa","True"
+"account_template_368","3.1.02.04.0014","Bens de Pequeno Valor","account_template_354","other","despesa","True"
+"account_template_369","3.1.02.04.0015","Leasing","account_template_354","other","despesa","True"
+"account_template_370","3.1.02.04.0016","Formação de Pessoal","account_template_354","other","despesa","True"
+"account_template_371","3.1.02.04.0017","Serviços de Terceiros - Pessoa Jurídica","account_template_354","other","despesa","True"
+"account_template_372","3.1.02.04.0018","Locação de Equipamentos","account_template_354","other","despesa","True"
+"account_template_373","3.1.02.04.0019","Feiras/Congressos/Simpósios/Cursos","account_template_354","other","despesa","True"
+"account_template_374","3.1.02.04.0020","Telefone","account_template_354","other","despesa","True"
+"account_template_375","3.1.02.04.0021","Comissões sobre Serviços","account_template_354","other","despesa","True"
+"account_template_376","3.1.02.04.0022","Jornais, Revistas e Periódicos","account_template_354","other","despesa","True"
+"account_template_377","3.1.02.04.0023","Confraternizações","account_template_354","other","despesa","True"
+"account_template_378","3.1.02.04.0024","Manutenção de Prédios","account_template_354","other","despesa","True"
+"account_template_379","3.1.02.04.0025","Brindes e Amostras","account_template_354","other","despesa","True"
+"account_template_380","3.1.02.04.0026","Aluguel de Equipamentos","account_template_354","other","despesa","True"
+"account_template_381","3.1.02.04.0027","Serv.de Terceiros P.Física - Autônomos","account_template_354","other","despesa","True"
+"account_template_382","3.1.02.04.0028","Manutenção de Veículos","account_template_354","other","despesa","True"
+"account_template_383","3.1.02.04.0029","Despesas de Importação","account_template_354","other","despesa","True"
+"account_template_384","3.1.02.04.0030","(-) Crédito PIS Não-Cumulativo","account_template_354","other","despesa","True"
+"account_template_385","3.1.02.04.0031","(-) Crédito Cofins Não-Cumulativo","account_template_354","other","despesa","True"
"account_template_386","3.1.02.05","ESTOQUE INICIAL DE PROD.EM ELABORAÇÃO","account_template_326","view","despesa","True"
-"account_template_387","3.1.02.05.0001","Estoque Inicial de Prod. em Elaboração","account_template_386","payable","despesa","True"
+"account_template_387","3.1.02.05.0001","Estoque Inicial de Prod. em Elaboração","account_template_386","other","despesa","True"
"account_template_388","3.1.02.06","ESTOQUE INICIAL DE PROD.ACABADOS","account_template_326","view","despesa","True"
-"account_template_389","3.1.02.06.0001","Estoque Inicial de Prod.Acabados","account_template_388","payable","despesa","True"
+"account_template_389","3.1.02.06.0001","Estoque Inicial de Prod.Acabados","account_template_388","other","despesa","True"
"account_template_390","3.1.02.07","ESTOQUE FINAL DE PROD.EM ELABORAÇÃO","account_template_326","view","despesa","True"
-"account_template_391","3.1.02.07.0001","Estoque Final de Prod.em Elaboração","account_template_390","payable","despesa","True"
+"account_template_391","3.1.02.07.0001","Estoque Final de Prod.em Elaboração","account_template_390","other","despesa","True"
"account_template_392","3.1.02.08","ESTOQUE FINAL DE PROD.ACABADOS","account_template_326","view","despesa","True"
-"account_template_393","3.1.02.08.0001","Estoque Final de Prod.Acabados","account_template_392","payable","despesa","True"
+"account_template_393","3.1.02.08.0001","Estoque Final de Prod.Acabados","account_template_392","other","despesa","True"
"account_template_394","3.2","despesa","account_template_321","view","despesa","True"
"account_template_395","3.2.01","DESPESAS OPERACIONAIS COMERCIAIS","account_template_394","view","despesa","True"
"account_template_396","3.2.01.01","DESPESAS TRABALHISTAS","account_template_395","view","despesa","True"
-"account_template_397","3.2.01.01.0001","Salários","account_template_396","payable","despesa","True"
-"account_template_398","3.2.01.01.0002","Horas Extras","account_template_396","payable","despesa","True"
-"account_template_399","3.2.01.01.0003","Vale Transporte","account_template_396","payable","despesa","True"
-"account_template_400","3.2.01.01.0004","Férias","account_template_396","payable","despesa","True"
-"account_template_401","3.2.01.01.0005","13º Salário","account_template_396","payable","despesa","True"
-"account_template_402","3.2.01.01.0006","Aviso Prévio/Indeniz.Trabalhisas","account_template_396","payable","despesa","True"
-"account_template_403","3.2.01.01.0007","Gratificações","account_template_396","payable","despesa","True"
-"account_template_404","3.2.01.01.0008","Assiduidade","account_template_396","payable","despesa","True"
-"account_template_405","3.2.01.01.0009","Abono Salarial","account_template_396","payable","despesa","True"
-"account_template_406","3.2.01.01.0010","Adicional de Insalubridade","account_template_396","payable","despesa","True"
-"account_template_407","3.2.01.01.0011","Vale Refeição","account_template_396","payable","despesa","True"
-"account_template_408","3.2.01.01.0012","Adicional Noturno","account_template_396","payable","despesa","True"
-"account_template_409","3.2.01.01.0013","Farmácia","account_template_396","payable","despesa","True"
-"account_template_410","3.2.01.01.0014","PAT - Programa Alim. Trabalhador","account_template_396","payable","despesa","True"
-"account_template_411","3.2.01.01.0015","Pró-Labore","account_template_396","payable","despesa","True"
-"account_template_412","3.2.01.01.0016","Assistência Médica","account_template_396","payable","despesa","True"
+"account_template_397","3.2.01.01.0001","Salários","account_template_396","other","despesa","True"
+"account_template_398","3.2.01.01.0002","Horas Extras","account_template_396","other","despesa","True"
+"account_template_399","3.2.01.01.0003","Vale Transporte","account_template_396","other","despesa","True"
+"account_template_400","3.2.01.01.0004","Férias","account_template_396","other","despesa","True"
+"account_template_401","3.2.01.01.0005","13º Salário","account_template_396","other","despesa","True"
+"account_template_402","3.2.01.01.0006","Aviso Prévio/Indeniz.Trabalhisas","account_template_396","other","despesa","True"
+"account_template_403","3.2.01.01.0007","Gratificações","account_template_396","other","despesa","True"
+"account_template_404","3.2.01.01.0008","Assiduidade","account_template_396","other","despesa","True"
+"account_template_405","3.2.01.01.0009","Abono Salarial","account_template_396","other","despesa","True"
+"account_template_406","3.2.01.01.0010","Adicional de Insalubridade","account_template_396","other","despesa","True"
+"account_template_407","3.2.01.01.0011","Vale Refeição","account_template_396","other","despesa","True"
+"account_template_408","3.2.01.01.0012","Adicional Noturno","account_template_396","other","despesa","True"
+"account_template_409","3.2.01.01.0013","Farmácia","account_template_396","other","despesa","True"
+"account_template_410","3.2.01.01.0014","PAT - Programa Alim. Trabalhador","account_template_396","other","despesa","True"
+"account_template_411","3.2.01.01.0015","Pró-Labore","account_template_396","other","despesa","True"
+"account_template_412","3.2.01.01.0016","Assistência Médica","account_template_396","other","despesa","True"
"account_template_413","3.2.01.02","ENCARGOS SOCIAIS","account_template_395","view","despesa","True"
-"account_template_414","3.2.01.02.0001","Inss","account_template_413","payable","despesa","True"
-"account_template_415","3.2.01.02.0002","Fgts","account_template_413","payable","despesa","True"
+"account_template_414","3.2.01.02.0001","Inss","account_template_413","other","despesa","True"
+"account_template_415","3.2.01.02.0002","Fgts","account_template_413","other","despesa","True"
"account_template_416","3.2.01.03","DESPESAS GERAIS COMERCIAIS","account_template_395","view","despesa","True"
-"account_template_417","3.2.01.03.0001","Comissões sobre Vendas","account_template_416","payable","despesa","True"
-"account_template_418","3.2.01.03.0002","Aluguel","account_template_416","payable","despesa","True"
-"account_template_419","3.2.01.03.0003","Agua e Esgoto","account_template_416","payable","despesa","True"
-"account_template_420","3.2.01.03.0004","Energia Elétrica","account_template_416","payable","despesa","True"
-"account_template_421","3.2.01.03.0006","Material de Expediente","account_template_416","payable","despesa","True"
-"account_template_422","3.2.01.03.0007","Condução","account_template_416","payable","despesa","True"
-"account_template_423","3.2.01.03.0008","Correios e Malotes","account_template_416","payable","despesa","True"
-"account_template_424","3.2.01.03.0009","Material de Limpeza","account_template_416","payable","despesa","True"
-"account_template_425","3.2.01.03.0010","Seguros","account_template_416","payable","despesa","True"
-"account_template_426","3.2.01.03.0011","Viagens e Estadias","account_template_416","payable","despesa","True"
-"account_template_427","3.2.01.03.0012","Manutenção e Conservação","account_template_416","payable","despesa","True"
-"account_template_428","3.2.01.03.0013","Depreciação e Amortização","account_template_416","payable","despesa","True"
-"account_template_429","3.2.01.03.0014","Propaganda e Publicidade","account_template_416","payable","despesa","True"
-"account_template_430","3.2.01.03.0015","Fretes e Carretos","account_template_416","payable","despesa","True"
-"account_template_431","3.2.01.03.0016","Combustíveis e Lubrificantes","account_template_416","payable","despesa","True"
-"account_template_432","3.2.01.03.0017","Leasing","account_template_416","payable","despesa","True"
-"account_template_433","3.2.01.03.0018","Serv.Terceiros P.Física - Autônomos","account_template_416","payable","despesa","True"
-"account_template_434","3.2.01.03.0019","Serv.Terceiros Pessoa Jurídica","account_template_416","payable","despesa","True"
-"account_template_435","3.2.01.03.0020","Feiras/Congressos/Simpósios/Cursos","account_template_416","payable","despesa","True"
-"account_template_436","3.2.01.03.0021","Telefone","account_template_416","payable","despesa","True"
-"account_template_437","3.2.01.03.0022","Despesas com Exportação","account_template_416","payable","despesa","True"
-"account_template_438","3.2.01.03.0024","Jornais, Revistas e Periódicos","account_template_416","payable","despesa","True"
-"account_template_439","3.2.01.03.0025","Refeições e Lanches","account_template_416","payable","despesa","True"
-"account_template_440","3.2.01.03.0026","Confraternizações","account_template_416","payable","despesa","True"
-"account_template_441","3.2.01.03.0027","Brindes","account_template_416","payable","despesa","True"
-"account_template_442","3.2.01.03.0028","Internet","account_template_416","payable","despesa","True"
+"account_template_417","3.2.01.03.0001","Comissões sobre Vendas","account_template_416","other","despesa","True"
+"account_template_418","3.2.01.03.0002","Aluguel","account_template_416","other","despesa","True"
+"account_template_419","3.2.01.03.0003","Agua e Esgoto","account_template_416","other","despesa","True"
+"account_template_420","3.2.01.03.0004","Energia Elétrica","account_template_416","other","despesa","True"
+"account_template_421","3.2.01.03.0006","Material de Expediente","account_template_416","other","despesa","True"
+"account_template_422","3.2.01.03.0007","Condução","account_template_416","other","despesa","True"
+"account_template_423","3.2.01.03.0008","Correios e Malotes","account_template_416","other","despesa","True"
+"account_template_424","3.2.01.03.0009","Material de Limpeza","account_template_416","other","despesa","True"
+"account_template_425","3.2.01.03.0010","Seguros","account_template_416","other","despesa","True"
+"account_template_426","3.2.01.03.0011","Viagens e Estadias","account_template_416","other","despesa","True"
+"account_template_427","3.2.01.03.0012","Manutenção e Conservação","account_template_416","other","despesa","True"
+"account_template_428","3.2.01.03.0013","Depreciação e Amortização","account_template_416","other","despesa","True"
+"account_template_429","3.2.01.03.0014","Propaganda e Publicidade","account_template_416","other","despesa","True"
+"account_template_430","3.2.01.03.0015","Fretes e Carretos","account_template_416","other","despesa","True"
+"account_template_431","3.2.01.03.0016","Combustíveis e Lubrificantes","account_template_416","other","despesa","True"
+"account_template_432","3.2.01.03.0017","Leasing","account_template_416","other","despesa","True"
+"account_template_433","3.2.01.03.0018","Serv.Terceiros P.Física - Autônomos","account_template_416","other","despesa","True"
+"account_template_434","3.2.01.03.0019","Serv.Terceiros Pessoa Jurídica","account_template_416","other","despesa","True"
+"account_template_435","3.2.01.03.0020","Feiras/Congressos/Simpósios/Cursos","account_template_416","other","despesa","True"
+"account_template_436","3.2.01.03.0021","Telefone","account_template_416","other","despesa","True"
+"account_template_437","3.2.01.03.0022","Despesas com Exportação","account_template_416","other","despesa","True"
+"account_template_438","3.2.01.03.0024","Jornais, Revistas e Periódicos","account_template_416","other","despesa","True"
+"account_template_439","3.2.01.03.0025","Refeições e Lanches","account_template_416","other","despesa","True"
+"account_template_440","3.2.01.03.0026","Confraternizações","account_template_416","other","despesa","True"
+"account_template_441","3.2.01.03.0027","Brindes","account_template_416","other","despesa","True"
+"account_template_442","3.2.01.03.0028","Internet","account_template_416","other","despesa","True"
"account_template_443","3.2.02","DESPESAS ADMINISTRATIVAS","account_template_394","view","despesa","True"
"account_template_444","3.2.02.01","DESPESAS TRABALHISTAS","account_template_443","view","despesa","True"
-"account_template_445","3.2.02.01.0001","Pro-Labore","account_template_444","payable","despesa","True"
-"account_template_446","3.2.02.01.0002","Salários","account_template_444","payable","despesa","True"
-"account_template_447","3.2.02.01.0003","Horas Extras","account_template_444","payable","despesa","True"
-"account_template_448","3.2.02.01.0004","Férias","account_template_444","payable","despesa","True"
-"account_template_449","3.2.02.01.0005","13º Salário","account_template_444","payable","despesa","True"
-"account_template_450","3.2.02.01.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_444","payable","despesa","True"
-"account_template_451","3.2.02.01.0007","Gratificações","account_template_444","payable","despesa","True"
-"account_template_452","3.2.02.01.0008","Adicional Insalubridade","account_template_444","payable","despesa","True"
-"account_template_453","3.2.02.01.0009","Adicional Noturno","account_template_444","payable","despesa","True"
-"account_template_454","3.2.02.01.0010","Vale Transporte","account_template_444","payable","despesa","True"
-"account_template_455","3.2.02.01.0011","Farmácia","account_template_444","payable","despesa","True"
-"account_template_456","3.2.02.01.0012","Vale Refeição","account_template_444","payable","despesa","True"
-"account_template_457","3.2.02.01.0013","PAT - Programa Alim. Trabalhador","account_template_444","payable","despesa","True"
-"account_template_458","3.2.02.01.0014","Salário Estagiários","account_template_444","payable","despesa","True"
-"account_template_459","3.2.02.01.0015","Assiduidade","account_template_444","payable","despesa","True"
-"account_template_460","3.2.02.01.0016","Abono Salarial","account_template_444","payable","despesa","True"
-"account_template_461","3.2.02.01.0017","Previdência Privada","account_template_444","payable","despesa","True"
-"account_template_462","3.2.02.01.0018","Assistência Médica","account_template_444","payable","despesa","True"
+"account_template_445","3.2.02.01.0001","Pro-Labore","account_template_444","other","despesa","True"
+"account_template_446","3.2.02.01.0002","Salários","account_template_444","other","despesa","True"
+"account_template_447","3.2.02.01.0003","Horas Extras","account_template_444","other","despesa","True"
+"account_template_448","3.2.02.01.0004","Férias","account_template_444","other","despesa","True"
+"account_template_449","3.2.02.01.0005","13º Salário","account_template_444","other","despesa","True"
+"account_template_450","3.2.02.01.0006","Aviso Prévio/Indeniz.Trabalhistas","account_template_444","other","despesa","True"
+"account_template_451","3.2.02.01.0007","Gratificações","account_template_444","other","despesa","True"
+"account_template_452","3.2.02.01.0008","Adicional Insalubridade","account_template_444","other","despesa","True"
+"account_template_453","3.2.02.01.0009","Adicional Noturno","account_template_444","other","despesa","True"
+"account_template_454","3.2.02.01.0010","Vale Transporte","account_template_444","other","despesa","True"
+"account_template_455","3.2.02.01.0011","Farmácia","account_template_444","other","despesa","True"
+"account_template_456","3.2.02.01.0012","Vale Refeição","account_template_444","other","despesa","True"
+"account_template_457","3.2.02.01.0013","PAT - Programa Alim. Trabalhador","account_template_444","other","despesa","True"
+"account_template_458","3.2.02.01.0014","Salário Estagiários","account_template_444","other","despesa","True"
+"account_template_459","3.2.02.01.0015","Assiduidade","account_template_444","other","despesa","True"
+"account_template_460","3.2.02.01.0016","Abono Salarial","account_template_444","other","despesa","True"
+"account_template_461","3.2.02.01.0017","Previdência Privada","account_template_444","other","despesa","True"
+"account_template_462","3.2.02.01.0018","Assistência Médica","account_template_444","other","despesa","True"
"account_template_463","3.2.02.02","ENCARGOS SOCIAIS","account_template_443","view","despesa","True"
-"account_template_464","3.2.02.02.0001","Inss","account_template_463","payable","despesa","True"
-"account_template_465","3.2.02.02.0002","Fgts","account_template_463","payable","despesa","True"
+"account_template_464","3.2.02.02.0001","Inss","account_template_463","other","despesa","True"
+"account_template_465","3.2.02.02.0002","Fgts","account_template_463","other","despesa","True"
"account_template_466","3.2.02.03","DESPESAS GERAIS ADMINISTRATIVAS","account_template_443","view","despesa","True"
-"account_template_467","3.2.02.03.0001","Aluguel","account_template_466","payable","despesa","True"
-"account_template_468","3.2.02.03.0002","Água e Esgoto","account_template_466","payable","despesa","True"
-"account_template_469","3.2.02.03.0003","Energia Elétrica","account_template_466","payable","despesa","True"
-"account_template_470","3.2.02.03.0004","Copa, Cozinha e Refeitório","account_template_466","payable","despesa","True"
-"account_template_471","3.2.02.03.0005","Material de Escritório","account_template_466","payable","despesa","True"
-"account_template_472","3.2.02.03.0006","Fretes e Carretos","account_template_466","payable","despesa","True"
-"account_template_473","3.2.02.03.0007","Correios e Malotes","account_template_466","payable","despesa","True"
-"account_template_474","3.2.02.03.0008","Material de Limpeza","account_template_466","payable","despesa","True"
-"account_template_475","3.2.02.03.0009","Seguros","account_template_466","payable","despesa","True"
-"account_template_476","3.2.02.03.0010","Viagens e Estadias","account_template_466","payable","despesa","True"
-"account_template_477","3.2.02.03.0011","Manutenção e Conservação","account_template_466","payable","despesa","True"
-"account_template_478","3.2.02.03.0012","Depreciação e Amortização","account_template_466","payable","despesa","True"
-"account_template_479","3.2.02.03.0013","Sindicato Patronal/Assoc.de Classe","account_template_466","payable","despesa","True"
-"account_template_480","3.2.02.03.0014","Feiras/Congressos/Simpósios/Cursos","account_template_466","payable","despesa","True"
-"account_template_481","3.2.02.03.0015","Internet","account_template_466","payable","despesa","True"
-"account_template_482","3.2.02.03.0016","Combustíveis e Lubrificantes","account_template_466","payable","despesa","True"
-"account_template_483","3.2.02.03.0017","Leasing","account_template_466","payable","despesa","True"
-"account_template_484","3.2.02.03.0018","Serviço de Terceiros - Pessoa Jurídica","account_template_466","payable","despesa","True"
-"account_template_485","3.2.02.03.0019","Telefone","account_template_466","payable","despesa","True"
-"account_template_486","3.2.02.03.0020","Legais e Judiciais","account_template_466","payable","despesa","True"
-"account_template_487","3.2.02.03.0021","Bens de Pequeno Valor","account_template_466","payable","despesa","True"
-"account_template_488","3.2.02.03.0022","Jornais Revistas e Periódicos","account_template_466","payable","despesa","True"
-"account_template_489","3.2.02.03.0023","Cópias e Reproduções","account_template_466","payable","despesa","True"
-"account_template_490","3.2.02.03.0024","Confraternizações","account_template_466","payable","despesa","True"
-"account_template_491","3.2.02.03.0025","Formação de Pessoal","account_template_466","payable","despesa","True"
-"account_template_492","3.2.02.03.0026","Segurança e Vigilância","account_template_466","payable","despesa","True"
-"account_template_493","3.2.02.03.0027","Despesas com Veículos","account_template_466","payable","despesa","True"
-"account_template_494","3.2.02.03.0028","Impressos","account_template_466","payable","despesa","True"
-"account_template_495","3.2.02.03.0029","Refeições e Lanches","account_template_466","payable","despesa","True"
-"account_template_496","3.2.02.03.0030","Comissões","account_template_466","payable","despesa","True"
-"account_template_497","3.2.02.03.0031","Condução ","account_template_466","payable","despesa","True"
-"account_template_498","3.2.02.03.0032","Telefone Linha Fixa","account_template_466","payable","despesa","True"
-"account_template_499","3.2.02.03.0033","Telefone Móvel Celular","account_template_466","payable","despesa","True"
-"account_template_500","3.2.02.03.0034","Telefone Nextel","account_template_466","payable","despesa","True"
-"account_template_501","3.2.02.03.0035","Crea-PR","account_template_466","payable","despesa","True"
-"account_template_502","3.2.02.03.0036","Despesas de Cartório","account_template_466","payable","despesa","True"
-"account_template_503","3.2.02.03.0037","Material de Consumo","account_template_466","payable","despesa","True"
-"account_template_504","3.2.02.03.0038","Donativos e Contribuições","account_template_466","payable","despesa","True"
-"account_template_505","3.2.02.03.0039","Locação de Equipamentos","account_template_466","payable","despesa","True"
+"account_template_467","3.2.02.03.0001","Aluguel","account_template_466","other","despesa","True"
+"account_template_468","3.2.02.03.0002","Água e Esgoto","account_template_466","other","despesa","True"
+"account_template_469","3.2.02.03.0003","Energia Elétrica","account_template_466","other","despesa","True"
+"account_template_470","3.2.02.03.0004","Copa, Cozinha e Refeitório","account_template_466","other","despesa","True"
+"account_template_471","3.2.02.03.0005","Material de Escritório","account_template_466","other","despesa","True"
+"account_template_472","3.2.02.03.0006","Fretes e Carretos","account_template_466","other","despesa","True"
+"account_template_473","3.2.02.03.0007","Correios e Malotes","account_template_466","other","despesa","True"
+"account_template_474","3.2.02.03.0008","Material de Limpeza","account_template_466","other","despesa","True"
+"account_template_475","3.2.02.03.0009","Seguros","account_template_466","other","despesa","True"
+"account_template_476","3.2.02.03.0010","Viagens e Estadias","account_template_466","other","despesa","True"
+"account_template_477","3.2.02.03.0011","Manutenção e Conservação","account_template_466","other","despesa","True"
+"account_template_478","3.2.02.03.0012","Depreciação e Amortização","account_template_466","other","despesa","True"
+"account_template_479","3.2.02.03.0013","Sindicato Patronal/Assoc.de Classe","account_template_466","other","despesa","True"
+"account_template_480","3.2.02.03.0014","Feiras/Congressos/Simpósios/Cursos","account_template_466","other","despesa","True"
+"account_template_481","3.2.02.03.0015","Internet","account_template_466","other","despesa","True"
+"account_template_482","3.2.02.03.0016","Combustíveis e Lubrificantes","account_template_466","other","despesa","True"
+"account_template_483","3.2.02.03.0017","Leasing","account_template_466","other","despesa","True"
+"account_template_484","3.2.02.03.0018","Serviço de Terceiros - Pessoa Jurídica","account_template_466","other","despesa","True"
+"account_template_485","3.2.02.03.0019","Telefone","account_template_466","other","despesa","True"
+"account_template_486","3.2.02.03.0020","Legais e Judiciais","account_template_466","other","despesa","True"
+"account_template_487","3.2.02.03.0021","Bens de Pequeno Valor","account_template_466","other","despesa","True"
+"account_template_488","3.2.02.03.0022","Jornais Revistas e Periódicos","account_template_466","other","despesa","True"
+"account_template_489","3.2.02.03.0023","Cópias e Reproduções","account_template_466","other","despesa","True"
+"account_template_490","3.2.02.03.0024","Confraternizações","account_template_466","other","despesa","True"
+"account_template_491","3.2.02.03.0025","Formação de Pessoal","account_template_466","other","despesa","True"
+"account_template_492","3.2.02.03.0026","Segurança e Vigilância","account_template_466","other","despesa","True"
+"account_template_493","3.2.02.03.0027","Despesas com Veículos","account_template_466","other","despesa","True"
+"account_template_494","3.2.02.03.0028","Impressos","account_template_466","other","despesa","True"
+"account_template_495","3.2.02.03.0029","Refeições e Lanches","account_template_466","other","despesa","True"
+"account_template_496","3.2.02.03.0030","Comissões","account_template_466","other","despesa","True"
+"account_template_497","3.2.02.03.0031","Condução ","account_template_466","other","despesa","True"
+"account_template_498","3.2.02.03.0032","Telefone Linha Fixa","account_template_466","other","despesa","True"
+"account_template_499","3.2.02.03.0033","Telefone Móvel Celular","account_template_466","other","despesa","True"
+"account_template_500","3.2.02.03.0034","Telefone Nextel","account_template_466","other","despesa","True"
+"account_template_501","3.2.02.03.0035","Crea-PR","account_template_466","other","despesa","True"
+"account_template_502","3.2.02.03.0036","Despesas de Cartório","account_template_466","other","despesa","True"
+"account_template_503","3.2.02.03.0037","Material de Consumo","account_template_466","other","despesa","True"
+"account_template_504","3.2.02.03.0038","Donativos e Contribuições","account_template_466","other","despesa","True"
+"account_template_505","3.2.02.03.0039","Locação de Equipamentos","account_template_466","other","despesa","True"
"account_template_506","3.2.02.04","DESPESAS INDEDUTÍVEIS","account_template_443","view","despesa","True"
-"account_template_507","3.2.02.04.0001","Autos de Infração","account_template_506","payable","despesa","True"
-"account_template_508","3.2.02.04.0002","Multas Punitívas","account_template_506","payable","despesa","True"
-"account_template_509","3.2.02.04.0003","Contribuições e Doações","account_template_506","payable","despesa","True"
-"account_template_510","3.2.02.04.0004","Impostos Federais - Exerc. Anteriores","account_template_506","payable","despesa","True"
-"account_template_511","3.2.02.04.0005","Impostos Estaduais - Exerc. Anteriores","account_template_506","payable","despesa","True"
-"account_template_512","3.2.02.04.0006","Impostos Municipais - Exerc.Anteriores","account_template_506","payable","despesa","True"
+"account_template_507","3.2.02.04.0001","Autos de Infração","account_template_506","other","despesa","True"
+"account_template_508","3.2.02.04.0002","Multas Punitívas","account_template_506","other","despesa","True"
+"account_template_509","3.2.02.04.0003","Contribuições e Doações","account_template_506","other","despesa","True"
+"account_template_510","3.2.02.04.0004","Impostos Federais - Exerc. Anteriores","account_template_506","other","despesa","True"
+"account_template_511","3.2.02.04.0005","Impostos Estaduais - Exerc. Anteriores","account_template_506","other","despesa","True"
+"account_template_512","3.2.02.04.0006","Impostos Municipais - Exerc.Anteriores","account_template_506","other","despesa","True"
"account_template_513","3.2.03","DESPESAS FINANCEIRAS","account_template_394","view","despesa","True"
"account_template_514","3.2.03.01","DESPESAS COM ATUALIZAÇÕES","account_template_513","view","despesa","True"
-"account_template_515","3.2.03.01.0001","Variação Monetária Passiva","account_template_514","payable","despesa","True"
-"account_template_516","3.2.03.01.0002","Variação Cambial Passiva","account_template_514","payable","despesa","True"
-"account_template_517","3.2.03.01.0003","Despesas de Cobrança","account_template_514","payable","despesa","True"
-"account_template_518","3.2.03.01.0004","Despesas Bancárias","account_template_514","payable","despesa","True"
+"account_template_515","3.2.03.01.0001","Variação Monetária Passiva","account_template_514","other","despesa","True"
+"account_template_516","3.2.03.01.0002","Variação Cambial Passiva","account_template_514","other","despesa","True"
+"account_template_517","3.2.03.01.0003","Despesas de Cobrança","account_template_514","other","despesa","True"
+"account_template_518","3.2.03.01.0004","Despesas Bancárias","account_template_514","other","despesa","True"
"account_template_519","3.2.03.02","JUROS E DESCONTOS","account_template_513","view","despesa","True"
-"account_template_520","3.2.03.02.0001","Juros de Mora","account_template_519","payable","despesa","True"
-"account_template_521","3.2.03.02.0002","Descontos Concedidos","account_template_519","payable","despesa","True"
-"account_template_522","3.2.03.02.0003","Juros s/ Empréstimos e Financiamentos","account_template_519","payable","despesa","True"
-"account_template_523","3.2.03.02.0004","Juros s/ Descontos de Duplicatas","account_template_519","payable","despesa","True"
+"account_template_520","3.2.03.02.0001","Juros de Mora","account_template_519","other","despesa","True"
+"account_template_521","3.2.03.02.0002","Descontos Concedidos","account_template_519","other","despesa","True"
+"account_template_522","3.2.03.02.0003","Juros s/ Empréstimos e Financiamentos","account_template_519","other","despesa","True"
+"account_template_523","3.2.03.02.0004","Juros s/ Descontos de Duplicatas","account_template_519","other","despesa","True"
"account_template_524","3.2.04","DESPESAS TRIBUTÁRIAS","account_template_394","view","despesa","True"
"account_template_525","3.2.04.01","IMPOSTOS, TAXAS E CONTRIBUIÇÕES","account_template_524","view","despesa","True"
-"account_template_526","3.2.04.01.0001","IOF","account_template_525","payable","despesa","True"
-"account_template_527","3.2.04.01.0002","CPMF","account_template_525","payable","despesa","True"
-"account_template_528","3.2.04.01.0003","IPTU","account_template_525","payable","despesa","True"
-"account_template_529","3.2.04.01.0004","IPVA","account_template_525","payable","despesa","True"
-"account_template_530","3.2.04.01.0005","IRF (Exclusivo na Fonte)","account_template_525","payable","despesa","True"
-"account_template_531","3.2.04.01.0006","Impostos e Taxas Federais","account_template_525","payable","despesa","True"
-"account_template_532","3.2.04.01.0007","Impostos e Taxas Estaduais","account_template_525","payable","despesa","True"
-"account_template_533","3.2.04.01.0008","Impostos e Taxas Municipais","account_template_525","payable","despesa","True"
+"account_template_526","3.2.04.01.0001","IOF","account_template_525","other","despesa","True"
+"account_template_527","3.2.04.01.0002","CPMF","account_template_525","other","despesa","True"
+"account_template_528","3.2.04.01.0003","IPTU","account_template_525","other","despesa","True"
+"account_template_529","3.2.04.01.0004","IPVA","account_template_525","other","despesa","True"
+"account_template_530","3.2.04.01.0005","IRF (Exclusivo na Fonte)","account_template_525","other","despesa","True"
+"account_template_531","3.2.04.01.0006","Impostos e Taxas Federais","account_template_525","other","despesa","True"
+"account_template_532","3.2.04.01.0007","Impostos e Taxas Estaduais","account_template_525","other","despesa","True"
+"account_template_533","3.2.04.01.0008","Impostos e Taxas Municipais","account_template_525","other","despesa","True"
"account_template_534","3.2.04.02","MULTAS","account_template_524","view","despesa","True"
-"account_template_535","3.2.04.02.0001","Multas Fiscais Compensatórias","account_template_534","payable","despesa","True"
-"account_template_536","3.2.04.02.0002","Multas de Mora","account_template_534","payable","despesa","True"
-"account_template_537","3.2.04.02.0003","Multas Contratuais","account_template_534","payable","despesa","True"
+"account_template_535","3.2.04.02.0001","Multas Fiscais Compensatórias","account_template_534","other","despesa","True"
+"account_template_536","3.2.04.02.0002","Multas de Mora","account_template_534","other","despesa","True"
+"account_template_537","3.2.04.02.0003","Multas Contratuais","account_template_534","other","despesa","True"
"account_template_538","3.2.05","OUTRAS DESPESAS OPERACIONAIS","account_template_394","view","despesa","True"
"account_template_539","3.2.05.01","PERDAS","account_template_538","view","despesa","True"
-"account_template_540","3.2.05.01.0001","Perdas com Duplicatas Incobráveis","account_template_539","payable","despesa","True"
+"account_template_540","3.2.05.01.0001","Perdas com Duplicatas Incobráveis","account_template_539","other","despesa","True"
"account_template_541","3.2.06","DESPESAS NÃO OPERACIONAIS","account_template_394","view","despesa","True"
"account_template_542","3.2.06.01","PERDAS","account_template_541","view","despesa","True"
-"account_template_543","3.2.06.01.0002","Perda crédito de ICMS s/ Imobilizado","account_template_542","payable","despesa","True"
-"account_template_544","3.2.06.01.0003","Perdas com Sinistros","account_template_542","payable","despesa","True"
-"account_template_545","3.2.06.01.0004","Perdas na Alienação de Imobilizado","account_template_542","payable","despesa","True"
-"account_template_546","3.2.06.01.0001","Perdas na Alienação de Investimentos","account_template_542","payable","despesa","True"
-"account_template_547","3.2.06.01.0005","Perdas, Deterioração de Mercadorias","account_template_542","payable","despesa","True"
+"account_template_543","3.2.06.01.0002","Perda crédito de ICMS s/ Imobilizado","account_template_542","other","despesa","True"
+"account_template_544","3.2.06.01.0003","Perdas com Sinistros","account_template_542","other","despesa","True"
+"account_template_545","3.2.06.01.0004","Perdas na Alienação de Imobilizado","account_template_542","other","despesa","True"
+"account_template_546","3.2.06.01.0001","Perdas na Alienação de Investimentos","account_template_542","other","despesa","True"
+"account_template_547","3.2.06.01.0005","Perdas, Deterioração de Mercadorias","account_template_542","other","despesa","True"
"account_template_548","4","CONTAS DE RESULTADO - RECEITAS","account_template_1","view","receita","True"
"account_template_549","4.1","RECEITAS","account_template_548","view","receita","True"
"account_template_550","4.1.01","RECEITAS OPERACIONAIS VENDAS E SERVIÇOS","account_template_549","view","receita","True"
"account_template_551","4.1.01.01","RECEITA BRUTA VENDAS NO PAÍS ","account_template_550","view","receita","True"
-"account_template_552","4.1.01.01.0001","Venda Produtos Fabricação Própria","account_template_551","receivable","receita","True"
-"account_template_553","4.1.01.01.0002","Industrialização de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_554","4.1.01.01.0003","Revenda de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_555","4.1.01.01.0004","Venda Fabricação Própria","account_template_551","receivable","receita","True"
-"account_template_556","4.1.01.01.0005","Industriazalição de Mercadorias","account_template_551","receivable","receita","True"
-"account_template_557","4.1.01.01.0006","Revenda de Mercadorias","account_template_551","receivable","receita","True"
+"account_template_552","4.1.01.01.0001","Venda Produtos Fabricação Própria","account_template_551","other","receita","True"
+"account_template_553","4.1.01.01.0002","Industrialização de Mercadorias","account_template_551","other","receita","True"
+"account_template_554","4.1.01.01.0003","Revenda de Mercadorias","account_template_551","other","receita","True"
+"account_template_555","4.1.01.01.0004","Venda Fabricação Própria","account_template_551","other","receita","True"
+"account_template_556","4.1.01.01.0005","Industriazalição de Mercadorias","account_template_551","other","receita","True"
+"account_template_557","4.1.01.01.0006","Revenda de Mercadorias","account_template_551","other","receita","True"
"account_template_558","4.1.01.02","RECEITA DE SERVIÇOS NO PAIS ","account_template_550","view","receita","True"
-"account_template_559","4.1.01.02.0001","Receita de Serviços","account_template_558","receivable","receita","True"
-"account_template_560","4.1.01.02.0002","Receita de Serviços","account_template_558","receivable","receita","True"
+"account_template_559","4.1.01.02.0001","Receita de Serviços","account_template_558","other","receita","True"
+"account_template_560","4.1.01.02.0002","Receita de Serviços","account_template_558","other","receita","True"
"account_template_561","4.1.01.03","RECEITA BRUTA DE VENDAS P/EXTERIOR","account_template_550","view","receita","True"
-"account_template_562","4.1.01.03.0001","Venda de Produtos Fabricação Própria(EX)","account_template_561","receivable","receita","True"
-"account_template_563","4.1.01.03.0002","Revenda de Mercadorias (EX)","account_template_561","receivable","receita","True"
+"account_template_562","4.1.01.03.0001","Venda de Produtos Fabricação Própria(EX)","account_template_561","other","receita","True"
+"account_template_563","4.1.01.03.0002","Revenda de Mercadorias (EX)","account_template_561","other","receita","True"
"account_template_564","4.1.02","(-) DEDUÇÕES DA RECEITA BRUTA","account_template_549","view","receita","True"
"account_template_565","4.1.02.01","DEVOLUÇÕES E ABATIMENTOS","account_template_564","view","receita","True"
-"account_template_566","4.1.02.01.0001","Devolução de Vendas","account_template_565","receivable","receita","True"
-"account_template_567","4.1.02.01.0002","Abatimentos Concedidos","account_template_565","receivable","receita","True"
-"account_template_568","4.1.02.01.0003","Devolução de Vendas","account_template_565","receivable","receita","True"
-"account_template_569","4.1.02.01.0004","Abatimentos Concedidos","account_template_565","receivable","receita","True"
+"account_template_566","4.1.02.01.0001","Devolução de Vendas","account_template_565","other","receita","True"
+"account_template_567","4.1.02.01.0002","Abatimentos Concedidos","account_template_565","other","receita","True"
+"account_template_568","4.1.02.01.0003","Devolução de Vendas","account_template_565","other","receita","True"
+"account_template_569","4.1.02.01.0004","Abatimentos Concedidos","account_template_565","other","receita","True"
"account_template_570","4.1.02.02","IMPOSTOS SOBRE VENDAS E SERVIÇOS","account_template_564","view","receita","True"
-"account_template_571","4.1.02.02.0001","ICMS sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_572","4.1.02.02.0002","IPI sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_573","4.1.02.02.0003","PIS sobre Vendas ","account_template_570","receivable","receita","True"
-"account_template_574","4.1.02.02.0004","COFINS sobre Vendas","account_template_570","receivable","receita","True"
-"account_template_575","4.1.02.02.0005","ISS sobre Serviços","account_template_570","receivable","receita","True"
+"account_template_571","4.1.02.02.0001","ICMS sobre Vendas","account_template_570","other","receita","True"
+"account_template_572","4.1.02.02.0002","IPI sobre Vendas","account_template_570","other","receita","True"
+"account_template_573","4.1.02.02.0003","PIS sobre Vendas ","account_template_570","other","receita","True"
+"account_template_574","4.1.02.02.0004","COFINS sobre Vendas","account_template_570","other","receita","True"
+"account_template_575","4.1.02.02.0005","ISS sobre Serviços","account_template_570","other","receita","True"
"account_template_579","4.1.02.03","(-) IMPOSTOS S/ DEVOLUÇÃO DE VENDAS","account_template_564","view","receita","True"
-"account_template_580","4.1.02.03.0001","(-) Cofins Não-Cumulativo s/ Dev. Vendas","account_template_579","receivable","receita","True"
-"account_template_581","4.1.02.03.0002","(-) ICMS sobre Devolução de Vendas","account_template_579","receivable","receita","True"
-"account_template_582","4.1.02.03.0003","(-) IPI s/Devolução de Vendas","account_template_579","receivable","receita","True"
-"account_template_583","4.1.02.03.0004","(-) Pis Não-Cumulativo s/ Dev. Vendas","account_template_579","receivable","receita","True"
+"account_template_580","4.1.02.03.0001","(-) Cofins Não-Cumulativo s/ Dev. Vendas","account_template_579","other","receita","True"
+"account_template_581","4.1.02.03.0002","(-) ICMS sobre Devolução de Vendas","account_template_579","other","receita","True"
+"account_template_582","4.1.02.03.0003","(-) IPI s/Devolução de Vendas","account_template_579","other","receita","True"
+"account_template_583","4.1.02.03.0004","(-) Pis Não-Cumulativo s/ Dev. Vendas","account_template_579","other","receita","True"
"account_template_584","4.1.03","RECEITAS FINANCEIRAS","account_template_549","view","receita","True"
"account_template_585","4.1.03.01","RECEITAS COM ATUALIZAÇÕES","account_template_584","view","receita","True"
-"account_template_586","4.1.03.01.0001","Variação Monetária Ativa","account_template_585","receivable","receita","True"
-"account_template_587","4.1.03.01.0002","Variação Cambial Ativa","account_template_585","receivable","receita","True"
+"account_template_586","4.1.03.01.0001","Variação Monetária Ativa","account_template_585","other","receita","True"
+"account_template_587","4.1.03.01.0002","Variação Cambial Ativa","account_template_585","other","receita","True"
"account_template_588","4.1.03.02","GANHOS COM APLICAÇÕES FINANCEIRAS","account_template_584","view","receita","True"
-"account_template_589","4.1.03.02.0001","Rend. Aplic.Automática C/Corrente","account_template_588","receivable","receita","True"
-"account_template_590","4.1.03.02.0002","Ganho Real Aplicações Renda Fixa","account_template_588","receivable","receita","True"
-"account_template_591","4.1.03.02.0003","Ganho Real Aplic.Renda Variável","account_template_588","receivable","receita","True"
-"account_template_592","4.1.03.02.0004","Rendimento Caderneta de Poupança","account_template_588","receivable","receita","True"
+"account_template_589","4.1.03.02.0001","Rend. Aplic.Automática C/Corrente","account_template_588","other","receita","True"
+"account_template_590","4.1.03.02.0002","Ganho Real Aplicações Renda Fixa","account_template_588","other","receita","True"
+"account_template_591","4.1.03.02.0003","Ganho Real Aplic.Renda Variável","account_template_588","other","receita","True"
+"account_template_592","4.1.03.02.0004","Rendimento Caderneta de Poupança","account_template_588","other","receita","True"
"account_template_593","4.1.03.03","JUROS E DESCONTOS OBTIDOS","account_template_584","view","receita","True"
-"account_template_594","4.1.03.03.0001","Juros Recebidos","account_template_593","receivable","receita","True"
-"account_template_595","4.1.03.03.0002","Descontos Obtidos","account_template_593","receivable","receita","True"
+"account_template_594","4.1.03.03.0001","Juros Recebidos","account_template_593","other","receita","True"
+"account_template_595","4.1.03.03.0002","Descontos Obtidos","account_template_593","other","receita","True"
"account_template_596","4.1.03.04","(-) TRIBUTOS S/RECEITAS FINANCEIRAS","account_template_584","view","receita","True"
-"account_template_597","4.1.03.04.0001","PIS sobre Receitas Financeiras","account_template_596","receivable","receita","True"
-"account_template_598","4.1.03.04.0002","COFINS sobre Receitas Financeiras","account_template_596","receivable","receita","True"
+"account_template_597","4.1.03.04.0001","PIS sobre Receitas Financeiras","account_template_596","other","receita","True"
+"account_template_598","4.1.03.04.0002","COFINS sobre Receitas Financeiras","account_template_596","other","receita","True"
"account_template_599","4.1.04","OUTRAS RECEITAS OPERACIONAIS","account_template_549","view","receita","True"
"account_template_600","4.1.04.01","LUCROS PARTIC.EM OUTRAS SOCIEDADES","account_template_599","view","receita","True"
-"account_template_601","4.1.04.01.0001","Resultado de Coligadas e Controladas","account_template_600","receivable","receita","True"
+"account_template_601","4.1.04.01.0001","Resultado de Coligadas e Controladas","account_template_600","other","receita","True"
"account_template_602","4.1.04.02","VENDAS DIVERSAS","account_template_599","view","receita","True"
-"account_template_603","4.1.04.02.0001","Venda de Sucatas","account_template_602","receivable","receita","True"
+"account_template_603","4.1.04.02.0001","Venda de Sucatas","account_template_602","other","receita","True"
"account_template_604","4.1.04.03","BRINDES E AMOSTRAS","account_template_599","view","receita","True"
-"account_template_605","4.1.04.03.0001","Brindes e Bonificações","account_template_604","receivable","receita","True"
-"account_template_606","4.1.04.03.0002","Amostras","account_template_604","receivable","receita","True"
+"account_template_605","4.1.04.03.0001","Brindes e Bonificações","account_template_604","other","receita","True"
+"account_template_606","4.1.04.03.0002","Amostras","account_template_604","other","receita","True"
"account_template_607","4.2","RESULTADOS NÃO OPERACIONAIS","account_template_548","view","receita","True"
"account_template_608","4.2.01","ALIENAÇÃO DE BENS PERMANENTES","account_template_607","view","receita","True"
"account_template_609","4.2.01.01","ALIENAÇÃO DE INVESTIMENTOS","account_template_608","view","receita","True"
-"account_template_610","4.2.01.01.0001","Dividendos Recebidos","account_template_609","receivable","receita","True"
-"account_template_611","4.2.01.01.0002","Alienação Partic.Societárias","account_template_609","receivable","receita","True"
+"account_template_610","4.2.01.01.0001","Dividendos Recebidos","account_template_609","other","receita","True"
+"account_template_611","4.2.01.01.0002","Alienação Partic.Societárias","account_template_609","other","receita","True"
"account_template_612","4.2.01.02","ALIENAÇÃO DE IMOBILIZADO","account_template_608","view","receita","True"
-"account_template_613","4.2.01.02.0001","Alienação de Máquinas e Equipamentos","account_template_612","receivable","receita","True"
-"account_template_614","4.2.01.02.0002","Alienação de Móveis e Utensílios","account_template_612","receivable","receita","True"
-"account_template_615","4.2.01.02.0003","Alienação de Ferramentas","account_template_612","receivable","receita","True"
-"account_template_616","4.2.01.02.0004","Alienação de Imóveis","account_template_612","receivable","receita","True"
-"account_template_617","4.2.01.02.0005","Alienação de Veículos","account_template_612","receivable","receita","True"
-"account_template_618","4.2.01.02.0006","Alienação de Equip.de Informática","account_template_612","receivable","receita","True"
+"account_template_613","4.2.01.02.0001","Alienação de Máquinas e Equipamentos","account_template_612","other","receita","True"
+"account_template_614","4.2.01.02.0002","Alienação de Móveis e Utensílios","account_template_612","other","receita","True"
+"account_template_615","4.2.01.02.0003","Alienação de Ferramentas","account_template_612","other","receita","True"
+"account_template_616","4.2.01.02.0004","Alienação de Imóveis","account_template_612","other","receita","True"
+"account_template_617","4.2.01.02.0005","Alienação de Veículos","account_template_612","other","receita","True"
+"account_template_618","4.2.01.02.0006","Alienação de Equip.de Informática","account_template_612","other","receita","True"
"account_template_619","4.2.02","DEDUÇÕES DAS ALIENAÇÕES DE BENS","account_template_607","view","receita","True"
"account_template_620","4.2.02.01","CUSTO DA ALIENAÇÃO DE INVESTIMENTOS","account_template_619","view","receita","True"
-"account_template_621","4.2.02.01.0001","Custo Alienação Partic.Societárias","account_template_620","receivable","receita","True"
+"account_template_621","4.2.02.01.0001","Custo Alienação Partic.Societárias","account_template_620","other","receita","True"
"account_template_622","4.2.02.02","CUSTO DA ALIENAÇÃO DE IMOBILIZADO","account_template_619","view","receita","True"
-"account_template_623","4.2.02.02.0001","Custo Alienação Máqs.e Equipamentos","account_template_622","receivable","receita","True"
-"account_template_624","4.2.02.02.0002","Custo Alienação Movs.e Utensílios","account_template_622","receivable","receita","True"
-"account_template_625","4.2.02.02.0003","Custo Alienação Ferramentas","account_template_622","receivable","receita","True"
-"account_template_626","4.2.02.02.0004","Custo Alienação de Imóveis","account_template_622","receivable","receita","True"
-"account_template_627","4.2.02.02.0005","Custo Alienação de Veículos","account_template_622","receivable","receita","True"
-"account_template_628","4.2.02.02.0006","Custo Alienação Equip.Informática","account_template_622","receivable","receita","True"
+"account_template_623","4.2.02.02.0001","Custo Alienação Máqs.e Equipamentos","account_template_622","other","receita","True"
+"account_template_624","4.2.02.02.0002","Custo Alienação Movs.e Utensílios","account_template_622","other","receita","True"
+"account_template_625","4.2.02.02.0003","Custo Alienação Ferramentas","account_template_622","other","receita","True"
+"account_template_626","4.2.02.02.0004","Custo Alienação de Imóveis","account_template_622","other","receita","True"
+"account_template_627","4.2.02.02.0005","Custo Alienação de Veículos","account_template_622","other","receita","True"
+"account_template_628","4.2.02.02.0006","Custo Alienação Equip.Informática","account_template_622","other","receita","True"
"account_template_629","4.2.03","OUTRAS RECEITAS NÃO OPERACIONAIS","account_template_607","view","receita","True"
"account_template_630","4.2.03.01","INDENIZAÇÃO DE SEGUROS","account_template_629","view","receita","True"
-"account_template_631","4.2.03.01.0001","Indenização de Seguros","account_template_630","receivable","receita","True"
+"account_template_631","4.2.03.01.0001","Indenização de Seguros","account_template_630","other","receita","True"
"account_template_632","4.2.03.02","OUTRAS RECEITAS","account_template_629","view","receita","True"
-"account_template_633","4.2.03.02.0001","Recuperação de Despesas","account_template_632","receivable","receita","True"
+"account_template_633","4.2.03.02.0001","Recuperação de Despesas","account_template_632","other","receita","True"
"account_template_634","5","CONTAS DE FECHAMENTO DE BALANÇO","account_template_1","view","resultado","True"
"account_template_635","5.1","RESULTADO DO EXERCÍCIO","account_template_634","view","resultado","True"
"account_template_636","5.1.01","RESULTADO OPERACIONAL","account_template_635","view","resultado","True"
diff --git a/addons/l10n_br/data/account.account.type.csv b/addons/l10n_br/data/account.account.type.csv
index 1b1d8cfddac..9f3844cdd2e 100644
--- a/addons/l10n_br/data/account.account.type.csv
+++ b/addons/l10n_br/data/account.account.type.csv
@@ -1,6 +1,6 @@
"id","code","name","close_method"
-"ativo","1","Ativo","balance"
-"passivo","2","Passivo","balance"
+"ativo","1","Ativo","unreconciled"
+"passivo","2","Passivo","unreconciled"
"despesa","3","Despesas","balance"
"receita","4","Receita","balance"
"resultado","5","Resultado","balance"
diff --git a/addons/l10n_cn/account_chart.xml b/addons/l10n_cn/account_chart.xml
index 624e76a190e..cadd288c810 100644
--- a/addons/l10n_cn/account_chart.xml
+++ b/addons/l10n_cn/account_chart.xml
@@ -12,13 +12,13 @@
资产类1
- balance
+ unreconciledasset负债类2
- balance
+ unreconciledliability
@@ -767,7 +767,7 @@
4103
- payable
+ other本年利润
diff --git a/addons/l10n_de/account_chart_skr03.xml b/addons/l10n_de/account_chart_skr03.xml
index 187f0259dbb..7a7e1fb8ee0 100644
--- a/addons/l10n_de/account_chart_skr03.xml
+++ b/addons/l10n_de/account_chart_skr03.xml
@@ -1228,7 +1228,7 @@
1490receivable
-
+
@@ -1732,7 +1732,7 @@
1401receivable
-
+
@@ -1740,7 +1740,7 @@
1400receivable
-
+
@@ -3164,7 +3164,7 @@
1450receivable
-
+
@@ -3476,7 +3476,7 @@
1630payable
-
+
@@ -3684,7 +3684,7 @@
1480receivable
-
+
@@ -3836,7 +3836,7 @@
1650payable
-
+
@@ -4836,7 +4836,7 @@
1470receivable
-
+
@@ -4844,7 +4844,7 @@
1610payable
-
+
@@ -5956,7 +5956,7 @@
1640payable
-
+
@@ -7084,7 +7084,7 @@
1601payable
-
+
@@ -7092,7 +7092,7 @@
1600payable
-
+
@@ -7108,7 +7108,7 @@
1605payable
-
+
@@ -7116,7 +7116,7 @@
1607payable
-
+
@@ -7124,7 +7124,7 @@
1606payable
-
+
@@ -7732,7 +7732,7 @@
1410receivable
-
+
@@ -8404,7 +8404,7 @@
1446receivable
-
+
@@ -8844,7 +8844,7 @@
1447receivable
-
+
diff --git a/addons/l10n_de/account_chart_skr04.xml b/addons/l10n_de/account_chart_skr04.xml
index 8ca8f35b98f..09af6c20e28 100644
--- a/addons/l10n_de/account_chart_skr04.xml
+++ b/addons/l10n_de/account_chart_skr04.xml
@@ -3313,7 +3313,7 @@
receivable
-
+
@@ -3367,7 +3367,7 @@
receivable
-
+
@@ -3376,7 +3376,7 @@
receivable
-
+
@@ -3385,7 +3385,7 @@
receivable
-
+
@@ -3394,7 +3394,7 @@
receivable
-
+
@@ -3403,7 +3403,7 @@
receivable
-
+
@@ -3412,7 +3412,7 @@
receivable
-
+
@@ -3546,7 +3546,7 @@
receivable
-
+
@@ -3670,7 +3670,7 @@
receivable
-
+
@@ -3794,7 +3794,7 @@
receivable
-
+
@@ -6214,7 +6214,7 @@
payable
-
+
@@ -6223,7 +6223,7 @@
payable
-
+
@@ -6232,7 +6232,7 @@
payable
-
+
@@ -6241,7 +6241,7 @@
payable
-
+
@@ -6268,7 +6268,7 @@
payable
-
+
@@ -6304,7 +6304,7 @@
payable
-
+
@@ -6445,7 +6445,7 @@
payable
-
+
@@ -6525,7 +6525,7 @@
payable
-
+
diff --git a/addons/l10n_es/account_chart.xml b/addons/l10n_es/account_chart.xml
index df0b218ae49..5147024deae 100644
--- a/addons/l10n_es/account_chart.xml
+++ b/addons/l10n_es/account_chart.xml
@@ -37,18 +37,18 @@
Terceros - A Cobrarterceros - recasset
- balance
+ unreconciledTerceros - A Pagarterceros - payliability
- balance
+ unreconciledImpuestostax
- balance
+ unreconciledFinancieras
diff --git a/addons/l10n_in/l10n_in_chart.xml b/addons/l10n_in/l10n_in_chart.xml
index f6851050604..0253756838c 100644
--- a/addons/l10n_in/l10n_in_chart.xml
+++ b/addons/l10n_in/l10n_in_chart.xml
@@ -37,11 +37,13 @@
Assetasset
+ unreconciledassetLiabilityliability
+ unreconciledliability
diff --git a/addons/l10n_it/data/account.account.template.csv b/addons/l10n_it/data/account.account.template.csv
index ff91ccba79a..388d037ad4e 100644
--- a/addons/l10n_it/data/account.account.template.csv
+++ b/addons/l10n_it/data/account.account.template.csv
@@ -66,8 +66,8 @@
2,2,"PASSIVO ",0,"account_type_view","view",TRUE
20,20,"PATRIMONIO NETTO ",2,"account_type_view","view",TRUE
2101,2101,"patrimonio netto ",20,"account_type_view","other",TRUE
-2102,2102,"utile d'esercizio ",20,"account_type_view","receivable",TRUE
-2103,2103,"perdita d'esercizio ",20,"account_type_view","payable",TRUE
+2102,2102,"utile d'esercizio ",20,"account_type_receivable","receivable",TRUE
+2103,2103,"perdita d'esercizio ",20,"account_type_payable","payable",TRUE
2104,2104,"prelevamenti extra gestione ",20,"account_type_view","other",TRUE
2105,2105,"titolare c/ritenute subite ",20,"account_type_view","other",TRUE
22,22,"FONDI PER RISCHI E ONERI ",2,"account_type_view","view",TRUE
diff --git a/addons/l10n_uk/__openerp__.py b/addons/l10n_uk/__openerp__.py
index 58a687e4be9..cf97b79d323 100644
--- a/addons/l10n_uk/__openerp__.py
+++ b/addons/l10n_uk/__openerp__.py
@@ -44,6 +44,7 @@
'demo_xml' : [
'demo/demo.xml'
],
- 'installable': 'True'
+ 'installable': 'True',
+ 'images': ['images/config_chart_l10n_uk.jpeg','images/l10n_uk_chart.jpeg'],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index 771779310cb..3c658333e14 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -138,7 +138,7 @@ class lunch_order(osv.osv):
'cashmove': fields.many2one('lunch.cashmove', 'CashMove' , readonly=True),
'descript': fields.char('Description Order', readonly=True, size=250, \
states = {'draft':[('readonly', False)]}),
- 'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ], \
+ 'state': fields.selection([('draft', 'New'), ('confirmed', 'Confirmed'), ], \
'State', readonly=True, select=True),
'price': fields.function(_price_get, string="Price"),
'category': fields.many2one('lunch.category','Category'),
diff --git a/addons/lunch/lunch_installer_view.xml b/addons/lunch/lunch_installer_view.xml
index a318df9eee0..693ac9aa27f 100644
--- a/addons/lunch/lunch_installer_view.xml
+++ b/addons/lunch/lunch_installer_view.xml
@@ -1,18 +1,32 @@
-
-
- Define Your Lunch Products
- ir.actions.act_window
- lunch.product
- form
- tree,form
-
-
-
-
-
-
- 50
-
+
+
+ Define Your Lunch Products
+ ir.actions.act_window
+ lunch.product
+ form
+ tree,form
+
+
+
+
+
+
+ 50
+
+
+
+ Create CashBox
+ ir.actions.act_window
+ lunch.cashbox
+ form
+ form
+
+
+
+
+
+ 51
+
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index 6721dd7c1e3..0b2cdf04e89 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -34,7 +34,7 @@
-
+
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index e9716be9e8e..08473cad102 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -62,6 +62,7 @@ The main features are:
"res_partner_view.xml",
'security/ir.model.access.csv',
'mail_data.xml',
+ 'mail_installer.xml',
],
'installable': True,
'active': False,
diff --git a/addons/mail/mail_installer.xml b/addons/mail/mail_installer.xml
new file mode 100644
index 00000000000..3faf5fad630
--- /dev/null
+++ b/addons/mail/mail_installer.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ Configure Email Server
+ ir.actions.act_window
+ ir.mail_server
+ form
+ form
+
+
+
+
+
+
+
+
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 27c91fcc3fe..547281911c4 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -113,7 +113,7 @@ this campaign to be run"),
Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.
With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.
Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"""),
- 'state': fields.selection([('draft', 'Draft'),
+ 'state': fields.selection([('draft', 'New'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled'),],
@@ -267,7 +267,7 @@ class marketing_campaign_segment(osv.osv):
'"No duplicates" prevents selecting records which have already entered the campaign previously.'\
'If the campaign has a "unique field" set, "no duplicates" will also prevent selecting records which have '\
'the same value for the unique field as other records that already entered the campaign.'),
- 'state': fields.selection([('draft', 'Draft'),
+ 'state': fields.selection([('draft', 'New'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled')],
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index cd872e64635..a60b3943a41 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -36,7 +36,7 @@
-
+
@@ -161,7 +161,7 @@
-
+
@@ -382,7 +382,7 @@
-
+
diff --git a/addons/membership/report/report_membership_view.xml b/addons/membership/report/report_membership_view.xml
index 0e6ddc630f6..61a0a1d52ce 100644
--- a/addons/membership/report/report_membership_view.xml
+++ b/addons/membership/report/report_membership_view.xml
@@ -36,14 +36,19 @@
-
-
+
+
+
-
+
@@ -91,7 +96,7 @@
report.membershipform
- {"search_default_member":1, 'search_default_Revenue':1, 'search_default_salesman':1, }
+ {"search_default_member":1, 'search_default_Revenue':1, 'search_default_this_month':1, 'search_default_salesman':1, }
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 7b9d403a95d..422700710d8 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -477,7 +477,7 @@ class mrp_production(osv.osv):
'move_created_ids2': fields.one2many('stock.move', 'production_id', 'Produced Products', domain=[('state','in', ('done', 'cancel'))]),
'product_lines': fields.one2many('mrp.production.product.line', 'production_id', 'Scheduled goods'),
'workcenter_lines': fields.one2many('mrp.production.workcenter.line', 'production_id', 'Work Centers Utilisation'),
- 'state': fields.selection([('draft','Draft'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','In Production'),('cancel','Cancelled'),('done','Done')],'State', readonly=True,
+ 'state': fields.selection([('draft','New'),('picking_except', 'Picking Exception'),('confirmed','Waiting Goods'),('ready','Ready to Produce'),('in_production','Production Started'),('cancel','Cancelled'),('done','Done')],'State', readonly=True,
help='When the production order is created the state is set to \'Draft\'.\n If the order is confirmed the state is set to \'Waiting Goods\'.\n If any exceptions are there, the state is set to \'Picking Exception\'.\
\nIf the stock is available then the state is set to \'Ready to Produce\'.\n When the production gets started then the state is set to \'In Production\'.\n When the production is over, the state is set to \'Done\'.'),
'hour_total': fields.function(_production_calc, type='float', string='Total Hours', multi='workorder', store=True),
diff --git a/addons/mrp/mrp_installer.xml b/addons/mrp/mrp_installer.xml
index 7eabd5a45b1..af2a35b3ce7 100644
--- a/addons/mrp/mrp_installer.xml
+++ b/addons/mrp/mrp_installer.xml
@@ -19,5 +19,54 @@
-
+
+
+
+ MRP Management
+ 6
+
+
+
+ Configure your work centers
+ ir.actions.act_window
+ mrp.workcenter
+ form,tree
+ form
+
+
+
+
+
+
+
+
+
+ Create Bill of Materials
+ ir.actions.act_window
+ mrp.bom
+ form,tree
+ form
+
+
+
+
+
+
+
+
+ Create or Import Products
+ ir.actions.act_window
+ product.product
+ form
+ tree,form
+
+ Create a product form for everything you buy or sell. Specify a supplier if the product can be purchased.
+
+
+
+
+
+ 20
+
+
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 19e25438cad..cec6fd42687 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -700,7 +700,7 @@
-
+
@@ -808,7 +808,7 @@
help="Manufacturing Orders which are currently in production."/>
diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py
index 3ad4184c413..4bb525db1ff 100644
--- a/addons/mrp/report/mrp_production_order.py
+++ b/addons/mrp/report/mrp_production_order.py
@@ -19,118 +19,4 @@
#
##############################################################################
-from osv import fields,osv
-import tools
-
-
-class mrp_production_order(osv.osv):
- _name = "mrp.production.order"
- _description = "Production Order Report"
- _auto = False
- _columns = {
- 'year': fields.char('Year',size=64,readonly=True),
- 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
- ('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
- 'day': fields.char('Day',size=64,readonly=True),
- 'origin': fields.char('Source Document', size=64),
- 'nbr': fields.integer('# of Lines', readonly=True),
- 'products_to_consume': fields.integer('Products to Consume', readonly=True),
- 'consumed_products': fields.integer('Consumed Products', readonly=True),
- 'date': fields.date('Date', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'product_id2': fields.many2one('product.product', 'Product Consumed', readonly=True),
- 'product_qty': fields.float('Product Qty', readonly=True),
- 'state': fields.selection([('draft','Draft'),
- ('picking_except', 'Picking Exception'),
- ('confirmed','Waiting Goods'),
- ('ready','Ready to Produce'),
- ('in_production','In Production'),
- ('cancel','Cancelled'),
- ('done','Done')],
- 'State', readonly=True),
- 'date_planned':fields.date('Scheduled Date'),
- 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', readonly=True),
- 'date_start': fields.datetime('Start Date',readonly=True),
- 'date_finished': fields.datetime('End Date',readonly=True),
- 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', readonly=True),
- 'company_id': fields.many2one('res.company','Company',readonly=True),
- 'bom_id': fields.many2one('mrp.bom', 'Bill of Material',readonly=True),
- 'routing_id': fields.many2one('mrp.routing', string='Routing',readonly=True),
- 'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True),
- 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True),
- 'priority': fields.selection([('0','Not urgent'),
- ('1','Normal'),
- ('2','Urgent'),
- ('3','Very Urgent')],
- 'Priority',readonly=True),
-
-
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'mrp_production_order')
- cr.execute("""
- create or replace view mrp_production_order as (
- select
- min(l.id) as id,
- to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
- to_char(s.create_date, 'YYYY') as year,
- to_char(s.create_date, 'MM') as month,
- to_char(s.create_date, 'YYYY-MM-DD') as day,
- s.product_id as product_id,
- l.product_id as product_id2,
- l.product_uom,
- sum(l.product_qty * u.factor) as product_qty,
- s.company_id as company_id,
- (select 1) as nbr,
- (select sum(sm.product_qty) from stock_move as sm
- left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
- left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
- where sm.product_id=ll.product_id and ll.id=l.id
- and sm.state not in ('done','cancel')
- group by sm.product_id) as products_to_consume,
- (select sum(sm.product_qty)/2 from stock_move as sm
- left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
- left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
- where sm.product_id=ll.product_id and ll.id=l.id
- and sm.state in ('done','cancel')
- group by sm.product_id) as consumed_products,
- s.location_src_id,
- s.location_dest_id,
- s.bom_id,
- s.routing_id,
- s.picking_id,
- s.date_start,
- s.date_finished,
- to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_planned,
- s.origin,
- s.priority,
- s.state
- from mrp_production_product_line l
- left join mrp_production s on (s.id=l.production_id)
- left join product_uom u on (u.id=l.product_uom)
- group by
- to_char(s.create_date, 'YYYY'),
- to_char(s.create_date, 'MM'),
- to_char(s.create_date, 'YYYY-MM-DD'),
- to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY'),
- l.product_id,
- s.product_id,
- l.product_uom,
- s.id,
- l.id,
- s.bom_id,
- s.routing_id,
- s.picking_id,
- s.priority,
- s.location_src_id,
- s.location_dest_id,
- s.state,
- to_date(to_char(s.date_planned, 'dd-MM-YYYY'),'dd-MM-YYYY'),
- s.origin,
- s.date_start,
- s.date_finished,
- s.company_id
- )""")
-mrp_production_order()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index dfcf41d9333..140170e4906 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -1,133 +1,6 @@
-
-
-
- mrp.production.order.tree
- mrp.production.order
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- mrp.production.order.graph
- mrp.production.order
- graph
-
-
-
-
-
-
-
-
-
- mrp.production.order.select
- mrp.production.order
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Production Analysis
- mrp.production.order
- form
- tree,graph
-
-
- {'search_default_Product': 1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}
- This reporting allows you to analyse your manufacturing activities and performance.
-
-
-
-
- tree
-
-
-
-
-
-
- graph
-
-
-
-
-
diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv
index 4af31e9c902..1d93fb460b5 100644
--- a/addons/mrp/security/ir.model.access.csv
+++ b/addons/mrp/security/ir.model.access.csv
@@ -29,7 +29,6 @@
"access_procurement_stock_worker","procurement.order stock_worker","model_procurement_order","stock.group_stock_user",1,1,1,1
"access_procurement_user","procurement.order.user","model_procurement_order","base.group_user",1,1,1,1
"access_mrp_production_stock_worker","mrp.production stock_worker","model_mrp_production","stock.group_stock_user",1,0,0,0
-"access_mrp_production_order","mrp.production.order","model_mrp_production_order","mrp.group_mrp_manager",1,1,1,1
"access_report_workcenter_load","report.workcenter.load","model_report_workcenter_load","mrp.group_mrp_manager",1,1,1,1
"access_report_mrp_inout","report.mrp.inout","model_report_mrp_inout","mrp.group_mrp_manager",1,1,1,1
"access_product_product_manager","product.product manager","product.model_product_product","mrp.group_mrp_manager",1,0,0,0
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index a8dc4aecc89..a486e0b332a 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -138,14 +138,15 @@ class StockMove(osv.osv):
wf_service = netsvc.LocalService("workflow")
for move in self.browse(cr, uid, ids, context=context):
new_moves = super(StockMove, self).action_scrap(cr, uid, [move.id], product_qty, location_id, context=context)
- self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
+ #If we are not scrapping our whole move, tracking and lot references must not be removed
+ #self.write(cr, uid, [move.id], {'prodlot_id': False, 'tracking_id': False})
production_ids = production_obj.search(cr, uid, [('move_lines', 'in', [move.id])])
for prod_id in production_ids:
wf_service.trg_validate(uid, 'mrp.production', prod_id, 'button_produce', cr)
for new_move in new_moves:
production_obj.write(cr, uid, production_ids, {'move_lines': [(4, new_move)]})
res.append(new_move)
- return {}
+ return res
StockMove()
diff --git a/addons/mrp_operations/mrp_operations_view.xml b/addons/mrp_operations/mrp_operations_view.xml
index a80a1a41a9c..2484345de9a 100644
--- a/addons/mrp_operations/mrp_operations_view.xml
+++ b/addons/mrp_operations/mrp_operations_view.xml
@@ -140,7 +140,7 @@
domain="[('state','=','pause')]"/>
diff --git a/addons/multi_company/multi_company_demo.xml b/addons/multi_company/multi_company_demo.xml
index d3b46e6d112..5248a26f4f9 100644
--- a/addons/multi_company/multi_company_demo.xml
+++ b/addons/multi_company/multi_company_demo.xml
@@ -267,7 +267,7 @@
-
+
Expenses Credit Notes Journal - (OpenERP IN)ECNJ-OpenERP IN
diff --git a/addons/outlook/outlook_installer.xml b/addons/outlook/outlook_installer.xml
index 7eb6e2b0d68..a85a16c245b 100644
--- a/addons/outlook/outlook_installer.xml
+++ b/addons/outlook/outlook_installer.xml
@@ -75,5 +75,8 @@
+
+
+
diff --git a/addons/point_of_sale/__openerp__.py b/addons/point_of_sale/__openerp__.py
index 3bd0f188581..125449cfc6f 100644
--- a/addons/point_of_sale/__openerp__.py
+++ b/addons/point_of_sale/__openerp__.py
@@ -39,17 +39,15 @@ Main features :
""",
'author': 'OpenERP SA',
'images': ['images/cash_registers.jpeg', 'images/pos_analysis.jpeg','images/register_analysis.jpeg','images/sale_order_pos.jpeg','images/product_pos.jpeg'],
- 'depends': ['sale', 'delivery'],
+ 'depends': ['sale'],
'init_xml': [],
'update_xml': [
'security/point_of_sale_security.xml',
'security/ir.model.access.csv',
'wizard/pos_details.xml',
- 'wizard/pos_add_product.xml',
'wizard/pos_confirm.xml',
'wizard/pos_discount.xml',
- 'wizard/pos_get_sale.xml',
'wizard/pos_open_statement.xml',
'wizard/pos_close_statement.xml',
'wizard/pos_box_entries.xml',
@@ -57,15 +55,10 @@ Main features :
'wizard/pos_payment_report_date_view.xml',
'wizard/pos_box_out.xml',
'wizard/pos_sales_user.xml',
- 'wizard/all_closed_cashbox_of_the_day.xml',
- 'wizard/pos_sales_user_current_user.xml',
- 'wizard/pos_sale_user_today.xml',
'wizard/pos_receipt_view.xml',
'wizard/pos_payment_report_user.xml',
'wizard/pos_payment_report.xml',
'wizard/pos_payment.xml',
- 'wizard/pos_scan_product_view.xml',
- 'wizard/pos_return_view.xml',
'point_of_sale_report.xml',
'point_of_sale_view.xml',
'report/pos_order_report_view.xml',
@@ -75,9 +68,15 @@ Main features :
'account_statement_view.xml',
'account_statement_report.xml',
],
- 'demo_xml': ['point_of_sale_demo.xml','account_statement_demo.xml'],
- 'test': ['test/point_of_sale_test.yml',
- 'test/point_of_sale_report.yml',
+ 'demo_xml': [
+ 'point_of_sale_demo.xml',
+ 'account_statement_demo.xml',
+ 'test/00_register_open.yml'
+ ],
+ 'test': [
+ 'test/01_order_to_payment.yml',
+ 'test/02_order_to_invoice.yml',
+ 'test/point_of_sale_report.yml'
],
'installable': True,
'certificate' : '001156338024966477869',
diff --git a/addons/point_of_sale/account_bank_statement.py b/addons/point_of_sale/account_bank_statement.py
index 706cd50a84b..9cc39ced45c 100644
--- a/addons/point_of_sale/account_bank_statement.py
+++ b/addons/point_of_sale/account_bank_statement.py
@@ -25,10 +25,9 @@ from osv import fields, osv
class account_journal(osv.osv):
_inherit = 'account.journal'
_columns = {
- 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox"),
- 'special_journal': fields.boolean('Special Journal', help="Will put all the orders in waiting status till being accepted"),
- 'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"),
- 'journal_users': fields.many2many('res.users', 'pos_journal_users', 'journal_id', 'user_id', 'Users'),
+ 'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox, without control of the initial balance."),
+ 'check_dtls': fields.boolean('Control Balance Before Closing', help="This field authorize Validation of Cashbox without controlling the closing balance."),
+ 'journal_user': fields.boolean('PoS Payment Method', help="Check this box if this journal define a payment method that can be used in point of sales."),
}
_defaults = {
'check_dtls': False,
@@ -49,14 +48,6 @@ class account_cash_statement(osv.osv):
else:
return True
- def _user_allow(self, cr, uid, statement_id, context=None):
- statement = self.browse(cr, uid, statement_id, context=context)
- if (not statement.journal_id.journal_users) and uid == 1: return True
- for user in statement.journal_id.journal_users:
- if uid == user.id:
- return True
- return False
-
def _get_cash_open_box_lines(self, cr, uid, context=None):
res = super(account_cash_statement,self)._get_cash_open_box_lines(cr, uid, context)
curr = [0.01, 0.02, 0.05, 0.10, 0.20, 0.50]
diff --git a/addons/point_of_sale/account_statement_demo.xml b/addons/point_of_sale/account_statement_demo.xml
index 7cdbbf99596..e8ee0a7c349 100644
--- a/addons/point_of_sale/account_statement_demo.xml
+++ b/addons/point_of_sale/account_statement_demo.xml
@@ -1,75 +1,17 @@
-
- Visa Journal
- VIJ
- cash
-
-
-
-
-
-
-
-
-
-
-
-
- Bancontact Journal
- BACJ
- cash
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
+
diff --git a/addons/point_of_sale/account_statement_view.xml b/addons/point_of_sale/account_statement_view.xml
index d6bfa4eda66..16cc953d9ef 100644
--- a/addons/point_of_sale/account_statement_view.xml
+++ b/addons/point_of_sale/account_statement_view.xml
@@ -11,28 +11,15 @@
-
+
-
+
-
-
-
-
-
-
account.bank.statement.inheritaccount.bank.statement
@@ -66,7 +53,7 @@
-
+
@@ -141,14 +128,6 @@
-
-
+
+
+
+
+
+
diff --git a/addons/point_of_sale/account_statement_wizard.xml b/addons/point_of_sale/account_statement_wizard.xml
deleted file mode 100644
index 25f099810b4..00000000000
--- a/addons/point_of_sale/account_statement_wizard.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py
index 04610463203..e6e06afdc89 100644
--- a/addons/point_of_sale/point_of_sale.py
+++ b/addons/point_of_sale/point_of_sale.py
@@ -42,125 +42,23 @@ class pos_config_journal(osv.osv):
pos_config_journal()
-
-class pos_company_discount(osv.osv):
- """ Company Discount and Cashboxes """
- _inherit = 'res.company'
-
- _columns = {
- 'company_discount': fields.float('Max Discount(%)', digits_compute=dp.get_precision('Point Of Sale')),
- 'max_diff': fields.float('Max Difference for Cashboxes', digits_compute=dp.get_precision('Point Of Sale Discount')),
- }
-
-pos_company_discount()
-
class pos_order(osv.osv):
- """ Point of sale gives business owners a convenient way of checking out customers
- and of recording sales """
-
_name = "pos.order"
_description = "Point of Sale"
- _order = "date_order, create_date desc"
+ _order = "id desc"
def unlink(self, cr, uid, ids, context=None):
for rec in self.browse(cr, uid, ids, context=context):
- for rec_statement in rec.statement_ids:
- if (rec_statement.statement_id and rec_statement.statement_id.state == 'confirm') or rec.state == 'done':
- raise osv.except_osv(_('Invalid action !'), _('Cannot delete a point of sale which is closed or contains confirmed cashboxes!'))
+ if rec.state not in ('draft','cancel'):
+ raise osv.except_osv(_('Unable to Delete !'), _('In order to delete a sale, it must be new or cancelled.'))
return super(pos_order, self).unlink(cr, uid, ids, context=context)
- def onchange_partner_pricelist(self, cr, uid, ids, part=False, context=None):
-
- """ Changed price list on_change of partner_id"""
+ def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
if not part:
return {'value': {}}
pricelist = self.pool.get('res.partner').browse(cr, uid, part, context=context).property_product_pricelist.id
return {'value': {'pricelist_id': pricelist}}
- def _amount_total(self, cr, uid, ids, field_name, arg, context=None):
- """ Calculates amount_tax of order line
- @param field_names: Names of fields.
- @return: Dictionary of values """
- cr.execute("""
- SELECT
- p.id,
- COALESCE(SUM(
- l.price_unit*l.qty*(1-(l.discount/100.0)))::decimal(16,2), 0
- ) AS amount
- FROM pos_order p
- LEFT OUTER JOIN pos_order_line l ON (p.id = l.order_id)
- WHERE p.id IN %s GROUP BY p.id """,(tuple(ids),))
- res = dict(cr.fetchall())
- for rec in self.browse(cr, uid, ids, context=context):
- if rec.partner_id \
- and rec.partner_id.property_account_position \
- and rec.partner_id.property_account_position.tax_ids:
- res[rec.id] = res[rec.id] - rec.amount_tax
- else :
- res[rec.id] = res[rec.id] + rec.amount_tax
- return res
-
- def _get_date_payment2(self, cr, uid, ids, context=None, *a):
- # Todo need to check this function
- """ Find payment Date
- @param field_names: Names of fields.
- @return: Dictionary of values """
- res = {}
- val = None
- for order in self.browse(cr, uid, ids, context=context):
- cr.execute("SELECT date_payment FROM pos_order WHERE id = %s", (order.id,))
- date_p = cr.fetchone()
- date_p = date_p and date_p[0] or None
- if date_p:
- res[order.id] = date_p
- return res
- if order.invoice_id:
- cr.execute(" SELECT MAX(l.date) "
- " FROM account_move_line l, account_move m, account_invoice i, account_move_reconcile r, pos_order o "
- " WHERE i.move_id = m.id AND l.move_id = m.id AND l.reconcile_id = r.id AND o.id = %s AND o.invoice_id = i.id",
- (order.id,))
- else:
- cr.execute("SELECT MAX(l.date) from account_move_line l "
- "left join account_bank_statement abs on (l.statement_id=abs.id)"
- "left join account_bank_statement_line absl on (absl.statement_id=abs.id) "
- "left join pos_order p on (p.id=absl.pos_statement_id) "
- "left join account_account a on (a.id=absl.account_id) "
- "where p.id=%s and l.reconcile_id is not NULL and a.reconcile=True", (order.id,))
- val = cr.fetchone()
- val = val and val[0] or None
- if val:
- res[order.id] = val
- return res
-
- def _get_date_payment(self, cr, uid, ids, context, *a):
- """ Find Validation Date
- @return: Dictionary of values """
- res = {}
- val = None
- for order in self.browse(cr, uid, ids):
- cr.execute("SELECT date_validation FROM pos_order WHERE id = %s", (order.id,))
- date_p = cr.fetchone()
- date_p = date_p and date_p[0] or None
- if date_p:
- res[order.id] = date_p
- return res
- discount_allowed = order.company_id.company_discount
- for line in order.lines:
- if line.discount > discount_allowed:
- return {order.id: None }
- if order.amount_paid == order.amount_total and not date_p:
- cr.execute("SELECT MAX(date) FROM account_bank_statement_line WHERE pos_statement_id = %s", (order.id,))
- val = cr.fetchone()
- val = val and val[0] or None
- if order.invoice_id and order.invoice_id.move_id and not date_p and not val:
- for o in order.invoice_id.move_id.line_id:
- if o.balance == 0:
- if val < o.date_created:
- val = o.date_created
- if val:
- res[order.id] = val
- return res
-
def _amount_all(self, cr, uid, ids, name, args, context=None):
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
@@ -171,325 +69,147 @@ class pos_order(osv.osv):
'amount_return':0.0,
'amount_tax':0.0,
}
- val = val1 = 0.0
+ val1 = val2 = 0.0
cur = order.pricelist_id.currency_id
for payment in order.statement_ids:
res[order.id]['amount_paid'] += payment.amount
res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0)
for line in order.lines:
val1 += line.price_subtotal_incl
- if order.price_type != 'tax_excluded':
- res[order.id]['amount_tax'] = reduce(lambda x, y: x+round(y['amount'], 2),
- tax_obj.compute_inv(cr, uid, line.product_id.taxes_id,
- line.price_unit * \
- (1-(line.discount or 0.0)/100.0), line.qty),
- res[order.id]['amount_tax'])
- elif line.qty != 0.0:
- for c in tax_obj.compute_all(cr, uid, line.product_id.taxes_id, \
- line.price_unit * (1-(line.discount or 0.0)/100.0), \
- line.qty, line.product_id, line.order_id.partner_id)['taxes']:
- val += c.get('amount', 0.0)
- res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val)
- res[order.id]['amount_total'] = res[order.id]['amount_tax'] + cur_obj.round(cr, uid, cur, val1)
+ val2 += line.price_subtotal
+ res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val1-val2)
+ res[order.id]['amount_total'] = cur_obj.round(cr, uid, cur, val1)
return res
- def _sale_journal_get(self, cr, uid, context=None):
- """ To get sale journal for this order
- @return: journal """
- journal_obj = self.pool.get('account.journal')
- res = journal_obj.search(cr, uid, [('type', '=', 'sale')], limit=1)
+ def _default_sale_journal(self, cr, uid, context=None):
+ res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1)
return res and res[0] or False
- def _shop_get(self, cr, uid, context=None):
- """ To get Shop for this order
- @return: Shop id """
+ def _default_shop(self, cr, uid, context=None):
res = self.pool.get('sale.shop').search(cr, uid, [])
return res and res[0] or False
def copy(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
- default.update({
+ d = {
'state': 'draft',
- 'partner_id': False,
'invoice_id': False,
'account_move': False,
'picking_id': False,
'statement_ids': [],
'nb_print': 0,
- 'pickings': [],
'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order'),
- })
- return super(pos_order, self).copy(cr, uid, id, default, context=context)
-
- def _get_v( self, cr, uid, ids, *args):
- """ Changed the Validation state of order
- @return: State """
- res_obj = self.pool.get('res.users')
- company_disc = self.browse(cr, uid, ids)
- list_jrnl = []
- r = {}
- if not company_disc:
- comp = res_obj.browse(cr, uid, uid).company_id.company_discount or 0.0
- else:
- comp = company_disc[0] and company_disc[0].company_id and company_disc[0].company_id.company_discount or 0.0
- cr.execute("SELECT discount FROM pos_order_line WHERE order_id = %s AND discount <= %s", (ids[0], comp))
- res = cr.fetchone()
- cr.execute("SELECT discount FROM pos_order_line WHERE order_id = %s AND discount > %s", (ids[0], comp))
- res2 = cr.fetchone()
- cr.execute("SELECT journal_id FROM account_bank_statement_line WHERE pos_statement_id = %s ", (ids[0], ))
- res3 = cr.fetchall()
- for r in res3:
- cr.execute("SELECT id FROM account_journal WHERE name = '%s' AND special_journal = 't'", (r[0], ))
- res3 = cr.fetchone()
- is_special = res3 and res3[0] or None
- if is_special:
- list_jrnl.append(is_special)
- for order in self.browse(cr, uid, ids):
- if order.state in ('paid', 'done', 'invoiced') and res and not res2 and not len(list_jrnl):
- r[order.id] = 'accepted'
- return r
+ }
+ d.update(default)
+ return super(pos_order, self).copy(cr, uid, id, d, context=context)
_columns = {
- 'name': fields.char('Order Description', size=64, required=True,
+ 'name': fields.char('Order Ref', size=64, required=True,
states={'draft': [('readonly', False)]}, readonly=True),
'company_id':fields.many2one('res.company', 'Company', required=True, readonly=True),
- 'num_sale': fields.char('Internal Note', size=64),
'shop_id': fields.many2one('sale.shop', 'Shop', required=True,
states={'draft': [('readonly', False)]}, readonly=True),
'date_order': fields.datetime('Date Ordered', readonly=True, select=True),
- 'date_validation': fields.function(_get_date_payment,
- string='Validation Date',
- type='date', select=True, store=True),
- 'date_payment': fields.function(_get_date_payment2,
- string='Payment Date',
- type='date', select=True, store=True),
- 'date_validity': fields.date('Validity Date', required=True),
'user_id': fields.many2one('res.users', 'Connected Salesman', help="Person who uses the the cash register. It could be a reliever, a student or an interim employee."),
- 'user_salesman_id': fields.many2one('res.users', 'Cashier', required=True, help="User who is logged into the system."),
- 'sale_manager': fields.many2one('res.users', 'Salesman Manager'),
'amount_tax': fields.function(_amount_all, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'amount_total': fields.function(_amount_all, string='Total', multi='all'),
'amount_paid': fields.function(_amount_all, string='Paid', states={'draft': [('readonly', False)]}, readonly=True, digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'amount_return': fields.function(_amount_all, 'Returned', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
'lines': fields.one2many('pos.order.line', 'order_id', 'Order Lines', states={'draft': [('readonly', False)]}, readonly=True),
- 'price_type': fields.selection([
- ('tax_excluded','Tax excluded')],
- 'Price Method', required=True),
'statement_ids': fields.one2many('account.bank.statement.line', 'pos_statement_id', 'Payments', states={'draft': [('readonly', False)]}, readonly=True),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, states={'draft': [('readonly', False)]}, readonly=True),
'partner_id': fields.many2one('res.partner', 'Customer', change_default=True, select=1, states={'draft': [('readonly', False)], 'paid': [('readonly', False)]}),
- 'state': fields.selection([('draft', 'Quotation'),
- ('payment', 'Payment'),
- ('advance','Advance'),
- ('paid', 'Paid'),
- ('done', 'Done'),
+
+ 'state': fields.selection([('draft', 'New'),
+ ('paid', 'Done'),
+ ('done', 'Posted'),
('invoiced', 'Invoiced'),
- ('cancel', 'Cancel')],
+ ('cancel', 'Cancelled')],
'State', readonly=True),
+
'invoice_id': fields.many2one('account.invoice', 'Invoice'),
- 'account_move': fields.many2one('account.move', 'Account Entry', readonly=True),
- 'pickings': fields.one2many('stock.picking', 'pos_order', 'Picking', readonly=True),
- 'picking_id': fields.many2one('stock.picking', 'Last Output Picking', readonly=True),
- 'first_name': fields.char('First Name', size=64),
+ 'account_move': fields.many2one('account.move', 'Journal Entry', readonly=True),
+ 'picking_id': fields.many2one('stock.picking', 'Picking', readonly=True),
'note': fields.text('Internal Notes'),
'nb_print': fields.integer('Number of Print', readonly=True),
'sale_journal': fields.many2one('account.journal', 'Journal', required=True, states={'draft': [('readonly', False)]}, readonly=True),
- 'invoice_wanted': fields.boolean('Create Invoice'),
- 'note_2': fields.char('Customer Note', size=64),
- 'type_rec': fields.char('Type of Receipt', size=64),
- 'remboursed': fields.boolean('Remboursed'),
- 'contract_number': fields.char('Contract Number', size=512, select=1),
- 'journal_entry': fields.boolean('Journal Entry'),
}
- def _select_pricelist(self, cr, uid, context=None):
- """ To get default pricelist for the order
- @param name: Names of fields.
- @return: pricelist ID
- """
+ def _default_pricelist(self, cr, uid, context=None):
res = self.pool.get('sale.shop').search(cr, uid, [], context=context)
if res:
shop = self.pool.get('sale.shop').browse(cr, uid, res[0], context=context)
return shop.pricelist_id and shop.pricelist_id.id or False
return False
- def _journal_default(self, cr, uid, context=None):
- """ To get default pricelist for the order
- @param name: Names of fields.
- @return: journal ID
- """
- journal_list = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')])
- return journal_list and journal_list[0] or False
-
_defaults = {
- 'user_salesman_id':lambda self, cr, uid, context: uid,
'user_id': lambda self, cr, uid, context: uid,
- 'sale_manager': lambda self, cr, uid, context: uid,
'state': 'draft',
- 'price_type': 'tax_excluded',
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.order'),
'date_order': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
- 'date_validity': lambda *a: (datetime.today() + relativedelta(months=+6)).strftime('%Y-%m-%d'),
'nb_print': 0,
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
- 'sale_journal': _sale_journal_get,
- 'invoice_wanted': False,
- 'shop_id': _shop_get,
- 'pricelist_id': _select_pricelist,
+ 'sale_journal': _default_sale_journal,
+ 'shop_id': _default_shop,
+ 'pricelist_id': _default_pricelist,
}
-
- def test_order_lines(self, cr, uid, order, context=None):
- """ Test order line is created or not for the order
- @param name: Names of fields.
- @return: True
- """
- if not order.lines:
- raise osv.except_osv(_('Error'), _('No order lines defined for this sale.'))
-
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'pos.order', order.id, 'paid', cr)
- return True
-
- def dummy_button(self, cr, uid, order, context=None):
- return True
-
def test_paid(self, cr, uid, ids, context=None):
- """ Test all amount is paid for this order
+ """A Point of Sale is paid when the sum
@return: True
"""
for order in self.browse(cr, uid, ids, context=context):
if order.lines and not order.amount_total:
return True
if (not order.lines) or (not order.statement_ids) or \
- Decimal(str(order.amount_total)) != Decimal(str(order.amount_paid)):
+ (abs(order.amount_total-order.amount_paid) > 0.00001):
return False
return True
- def _get_qty_differences(self, orders, old_picking):
- """check if the customer changed the product quantity """
- order_dict = {}
- for order in orders:
- for line in order.lines:
- order_dict[line.product_id.id] = line
-
- # check the quantity differences:
- diff_dict = {}
- for line in old_picking.move_lines:
- order_line = order_dict.get(line.product_id.id)
- if not order_line:
- deleted = True
- qty_to_delete_from_original_picking = line.product_qty
- diff_dict[line.product_id.id] = (deleted, qty_to_delete_from_original_picking)
- elif line.product_qty != order_line.qty:
- deleted = False
- qty_to_delete_from_original_picking = line.product_qty - order_line.qty
- diff_dict[line.product_id.id] = (deleted, qty_to_delete_from_original_picking)
-
- return diff_dict
-
- def _split_picking(self, cr, uid, ids, context, old_picking, diff_dict):
- """if the customer changes the product quantity, split the picking in two"""
- # create a copy of the original picking and adjust the product qty:
- picking_model = self.pool.get('stock.picking')
- defaults = {
- 'note': "Partial picking from customer", # add a note to tell why we create a new picking
- 'name': self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out'), # increment the sequence
- }
-
- new_picking_id = picking_model.copy(cr, uid, old_picking.id, defaults) # state = 'draft'
- new_picking = picking_model.browse(cr, uid, new_picking_id, context=context)
-
- for line in new_picking.move_lines:
- p_id = line.product_id.id
- if p_id in diff_dict:
- diff = diff_dict[p_id]
- deleted = diff[0]
- qty_to_del = diff[1]
- if deleted: # product has been deleted (customer didn't took it):
- # delete this product from old picking:
- for old_line in old_picking.move_lines:
- if old_line.product_id.id == p_id:
- old_line.write({'state': 'draft'}, context=context) # cannot delete if not draft
- old_line.unlink(context=context)
- elif qty_to_del > 0: # product qty has been modified (customer took less than the ordered quantity):
- # subtract qty from old picking:
- for old_line in old_picking.move_lines:
- if old_line.product_id.id == p_id:
- old_line.write({'product_qty': old_line.product_qty - qty_to_del}, context=context)
- # add qty to new picking:
- line.write({'product_qty': qty_to_del}, context=context)
- else: # product hasn't changed (customer took it without any change):
- # delete this product from new picking:
- line.unlink(context=context)
- else:
- # delete it in the new picking:
- line.unlink(context=context)
-
def create_picking(self, cr, uid, ids, context=None):
"""Create a picking for each order and validate it."""
picking_obj = self.pool.get('stock.picking')
- property_obj = self.pool.get("ir.property")
- move_obj = self.pool.get('stock.move')
- pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')
- orders = self.browse(cr, uid, ids, context=context)
partner_obj = self.pool.get('res.partner')
- for order in orders:
+ move_obj = self.pool.get('stock.move')
+
+ for order in self.browse(cr, uid, ids, context=context):
addr = order.partner_id and partner_obj.address_get(cr, uid, [order.partner_id.id], ['delivery']) or {}
- if not order.picking_id:
- new = True
- picking_id = picking_obj.create(cr, uid, {
- 'name': pick_name,
- 'origin': order.name,
- 'address_id': addr.get('delivery',False),
- 'type': 'out',
+ picking_id = picking_obj.create(cr, uid, {
+ 'origin': order.name,
+ 'address_id': addr.get('delivery',False),
+ 'type': 'out',
+ 'company_id': order.company_id.id,
+ 'move_type': 'direct',
+ 'note': order.note or "",
+ 'invoice_state': 'none',
+ 'auto_picking': True,
+ }, context=context)
+ self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context)
+ location_id = order.shop_id.warehouse_id.lot_stock_id.id
+ output_id = order.shop_id.warehouse_id.lot_output_id.id
+
+ for line in order.lines:
+ if line.product_id and line.product_id.type == 'service':
+ continue
+ if line.qty < 0:
+ location_id, output_id = output_id, location_id
+
+ move_obj.create(cr, uid, {
+ 'name': line.name,
+ 'product_uom': line.product_id.uom_id.id,
+ 'product_uos': line.product_id.uom_id.id,
+ 'picking_id': picking_id,
+ 'product_id': line.product_id.id,
+ 'product_uos_qty': abs(line.qty),
+ 'product_qty': abs(line.qty),
+ 'tracking_id': False,
'state': 'draft',
- 'move_type': 'direct',
- 'note': 'POS notes ' + (order.note or ""),
- 'invoice_state': 'none',
- 'auto_picking': True,
- 'pos_order': order.id,
+ 'location_id': location_id,
+ 'location_dest_id': output_id,
}, context=context)
- self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context)
- else:
- picking_id = order.picking_id.id
- picking_obj.write(cr, uid, [picking_id], {'auto_picking': True}, context=context)
- picking = picking_obj.browse(cr, uid, [picking_id], context=context)[0]
- new = False
-
- # split the picking (if product quantity has changed):
- diff_dict = self._get_qty_differences(orders, picking)
- if diff_dict:
- self._split_picking(cr, uid, ids, context, picking, diff_dict)
-
- if new:
- for line in order.lines:
- if line.product_id and line.product_id.type == 'service':
- continue
- prop_ids = property_obj.search(cr, uid, [('name', '=', 'property_stock_customer')], context=context)
- val = property_obj.browse(cr, uid, prop_ids[0], context=context).value_reference
- cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w WHERE w.lot_stock_id = s.id AND w.id = %s", (order.shop_id.warehouse_id.id, ))
- res = cr.fetchone()
- location_id = res and res[0] or None
- stock_dest_id = val.id
- if line.qty < 0:
- location_id, stock_dest_id = stock_dest_id, location_id
- move_obj.create(cr, uid, {
- 'name': '(POS %d)' % (order.id, ),
- 'product_uom': line.product_id.uom_id.id,
- 'product_uos': line.product_id.uom_id.id,
- 'picking_id': picking_id,
- 'product_id': line.product_id.id,
- 'product_uos_qty': abs(line.qty),
- 'product_qty': abs(line.qty),
- 'tracking_id': False,
- 'pos_line_id': line.id,
- 'state': 'waiting',
- 'location_id': location_id,
- 'location_dest_id': stock_dest_id,
- 'prodlot_id': line.prodlot_id and line.prodlot_id.id or False
- }, context=context)
+ if line.qty < 0:
+ location_id, output_id = output_id, location_id
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
@@ -497,36 +217,27 @@ class pos_order(osv.osv):
return True
def set_to_draft(self, cr, uid, ids, *args):
- """ Changes order state to draft
- @return: True
- """
if not len(ids):
return False
+ for order in self.browse(cr, uid, ids, context=context):
+ if order.state<>'cancel':
+ raise osv.except_osv(_('Error!'), _('In order to set to draft a sale, it must be cancelled.'))
self.write(cr, uid, ids, {'state': 'draft'})
wf_service = netsvc.LocalService("workflow")
for i in ids:
wf_service.trg_create(uid, 'pos.order', i, cr)
return True
- def button_invalidate(self, cr, uid, ids, *args):
- """ Check the access for the sale order
- @return: True
- """
- res_obj = self.pool.get('res.company')
- try:
- part_company = res_obj.browse(cr, uid, uid) and res_obj.browse(cr, uid, uid).parent_id and res_obj.browse(cr, uid, uid).parent_id.id or None
- except Exception:
- raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
- if part_company:
- raise osv.except_osv(_('Error'), _('You don\'t have enough access to validate this sale!'))
- return True
-
def cancel_order(self, cr, uid, ids, context=None):
""" Changes order state to cancel
@return: True
"""
+ stock_picking_obj = self.pool.get('stock.picking')
+ for order in self.browse(cr, uid, ids, context=context):
+ wf_service.trg_validate(uid, 'stock.picking', order.picking_id.id, 'button_cancel', cr)
+ if stock_picking_obj.browse(cr, uid, order.picking_id.id, context=context).state <> 'cancel':
+ raise osv.except_osv(_('Error!'), _('Unable to cancel the picking.'))
self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
- self.cancel_picking(cr, uid, ids, context=context)
return True
def add_payment(self, cr, uid, order_id, data, context=None):
@@ -538,8 +249,6 @@ class pos_order(osv.osv):
curr_c = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id
curr_company = curr_c.id
order = self.browse(cr, uid, order_id, context=context)
- if not order.num_sale and data['num_sale']:
- self.write(cr, uid, order_id, {'num_sale': data['num_sale']}, context=context)
ids_new = []
args = {
'amount': data['amount'],
@@ -551,15 +260,7 @@ class pos_order(osv.osv):
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
args['account_id'] = order.partner_id and order.partner_id.property_account_receivable \
and order.partner_id.property_account_receivable.id or account_def.id or curr_c.account_receivable.id
- if data.get('is_acc', False):
- args['is_acc'] = data['is_acc']
- args['account_id'] = prod_obj.browse(cr, uid, data['product_id'], context=context).property_account_income \
- and prod_obj.browse(cr, uid, data['product_id'], context=context).property_account_income.id
- if not args['account_id']:
- raise osv.except_osv(_('Error'), _('Please provide an account for the product: %s')% \
- (prod_obj.browse(cr, uid, data['product_id'], context=context).name))
args['partner_id'] = order.partner_id and order.partner_id.id or None
- args['ref'] = order.contract_number or None
statement_id = statement_obj.search(cr,uid, [
('journal_id', '=', data['journal']),
@@ -584,58 +285,39 @@ class pos_order(osv.osv):
return statement_id
- def add_product(self, cr, uid, order_id, product_id, qty, context=None):
-
- """Create a new order line the order"""
-
- line_obj = self.pool.get('pos.order.line')
- values = self.read(cr, uid, order_id, ['partner_id', 'pricelist_id'])
-
- pricelist = values['pricelist_id'] and values['pricelist_id'][0]
- product = values['partner_id'] and values['partner_id'][0]
-
- price = line_obj.price_by_product(cr, uid, [],
- pricelist, product_id, qty, product)
-
- order_line_id = line_obj.create(cr, uid, {
- 'order_id': order_id,
- 'product_id': product_id,
- 'qty': qty,
- 'price_unit': price,
- }, context=context)
- return order_line_id, price
-
def refund(self, cr, uid, ids, context=None):
-
"""Create a copy of order for refund order"""
-
clone_list = []
line_obj = self.pool.get('pos.order.line')
-
for order in self.browse(cr, uid, ids, context=context):
clone_id = self.copy(cr, uid, order.id, {
'name': order.name + ' REFUND',
- 'date_order': time.strftime('%Y-%m-%d'),
- 'state': 'draft',
- 'note': 'REFUND\n'+ (order.note or ''),
- 'invoice_id': False,
- 'nb_print': 0,
- 'statement_ids': False,
- }, context=context)
+ }, context=context)
clone_list.append(clone_id)
-
for clone in self.browse(cr, uid, clone_list, context=context):
for order_line in clone.lines:
line_obj.write(cr, uid, [order_line.id], {
'qty': -order_line.qty
- }, context=context)
- return clone_list
+ }, context=context)
+
+ new_order = ','.join(map(str,clone_list))
+ abs = {
+ #'domain': "[('id', 'in', ["+new_order+"])]",
+ 'name': _('Return Products'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'pos.order',
+ 'res_id':clone_list[0],
+ 'view_id': False,
+ 'context':context,
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ }
+ return abs
def action_invoice(self, cr, uid, ids, context=None):
-
- """Create a invoice of order """
-
inv_ref = self.pool.get('account.invoice')
inv_line_ref = self.pool.get('account.invoice.line')
product_obj = self.pool.get('product.product')
@@ -675,35 +357,51 @@ class pos_order(osv.osv):
'quantity': line.qty,
}
inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1]
-
inv_line.update(inv_line_ref.product_id_change(cr, uid, [],
line.product_id.id,
line.product_id.uom_id.id,
line.qty, partner_id = order.partner_id.id,
fposition_id=order.partner_id.property_account_position.id)['value'])
+ if line.product_id.description_sale:
+ inv_line['note'] = line.product_id.description_sale
inv_line['price_unit'] = line.price_unit
inv_line['discount'] = line.discount
inv_line['name'] = inv_name
inv_line['invoice_line_tax_id'] = ('invoice_line_tax_id' in inv_line)\
and [(6, 0, inv_line['invoice_line_tax_id'])] or []
inv_line_ref.create(cr, uid, inv_line, context=context)
+ inv_ref.button_reset_taxes(cr, uid, [inv_id], context=context)
- for i in inv_ids:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'account.invoice', i, 'invoice_open', cr)
- return inv_ids
+ if not inv_ids: return {}
+ mod_obj = self.pool.get('ir.model.data')
+ res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form')
+ res_id = res and res[1] or False
+ return {
+ 'name': _('PoS Invoices'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'view_id': res_id,
+ 'res_model': 'account.invoice',
+ 'context': "{'type':'out_invoice'}",
+ 'type': 'ir.actions.act_window',
+ 'nodestroy': True,
+ 'target': 'current',
+ 'res_id': inv_ids and inv_ids[0] or False,
+ }
def create_account_move(self, cr, uid, ids, context=None):
- """Create a account move line of order """
+ """Create a account move line of order grouped by products or not."""
account_move_obj = self.pool.get('account.move')
account_move_line_obj = self.pool.get('account.move.line')
account_period_obj = self.pool.get('account.period')
+ period = account_period_obj.find(cr, uid, context=context)[0]
account_tax_obj = self.pool.get('account.tax')
res_obj=self.pool.get('res.users')
property_obj=self.pool.get('ir.property')
- period = account_period_obj.find(cr, uid, context=context)[0]
for order in self.browse(cr, uid, ids, context=context):
+ if order.state<>'paid': continue
+
curr_c = res_obj.browse(cr, uid, uid).company_id
comp_id = res_obj.browse(cr, order.user_id.id, order.user_id.id).company_id
comp_id = comp_id and comp_id.id or False
@@ -716,19 +414,14 @@ class pos_order(osv.osv):
# Create an entry for the sale
move_id = account_move_obj.create(cr, uid, {
'journal_id': order.sale_journal.id,
- 'period_id': period,
- }, context=context)
+ }, context=context)
# Create an move for each order line
for line in order.lines:
tax_amount = 0
taxes = [t for t in line.product_id.taxes_id]
- if order.price_type == 'tax_excluded':
- computed_taxes = account_tax_obj.compute_all(
- cr, uid, taxes, line.price_unit, line.qty)['taxes']
- else:
- computed_taxes = account_tax_obj.compute_inv(
- cr, uid, taxes, line.price_unit, line.qty)
+ computed = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit * (100.0-line.discount) / 100.0, line.qty)
+ computed_taxes = computed['taxes']
for tax in computed_taxes:
tax_amount += round(tax['amount'], 2)
@@ -740,10 +433,7 @@ class pos_order(osv.osv):
group_tax[group_key] += round(tax['amount'], 2)
else:
group_tax[group_key] = round(tax['amount'], 2)
- if order.price_type != 'tax_excluded':
- amount = line.price_subtotal - tax_amount
- else:
- amount = line.price_subtotal
+ amount = line.price_subtotal
# Search for the income account
if line.product_id.property_account_income.id:
@@ -773,11 +463,12 @@ class pos_order(osv.osv):
if tax_code_id:
break
+
# Create a move for the line
account_move_line_obj.create(cr, uid, {
- 'name': "aa"+order.name,
+ 'name': line.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'quantity': line.qty,
'product_id': line.product_id.id,
'move_id': move_id,
@@ -804,9 +495,9 @@ class pos_order(osv.osv):
continue
account_move_line_obj.create(cr, uid, {
- 'name': "bb" + order.name,
+ 'name': "Tax" + line.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'product_id':line.product_id.id,
'quantity': line.qty,
'move_id': move_id,
@@ -825,9 +516,9 @@ class pos_order(osv.osv):
(tax_code_pos, base_code_pos, account_pos)= (0, 1, 2)
for key, amount in group_tax.items():
account_move_line_obj.create(cr, uid, {
- 'name': "cc" + order.name,
+ 'name': 'Tax',
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'move_id': move_id,
'company_id': comp_id,
'quantity': line.qty,
@@ -843,9 +534,9 @@ class pos_order(osv.osv):
# counterpart
to_reconcile.append(account_move_line_obj.create(cr, uid, {
- 'name': "dd" + order.name,
+ 'name': order.name,
'date': order.date_order[:10],
- 'ref': order.contract_number or order.name,
+ 'ref': order.name,
'move_id': move_id,
'company_id': comp_id,
'account_id': order_account,
@@ -857,71 +548,16 @@ class pos_order(osv.osv):
'period_id': period,
'partner_id': order.partner_id and order.partner_id.id or False
}, context=context))
-
-
- # search the account receivable for the payments:
- account_receivable = order.sale_journal.default_credit_account_id.id
- if not account_receivable:
- raise osv.except_osv(_('Error !'),
- _('There is no receivable account defined for this journal:'\
- ' "%s" (id:%d)') % (order.sale_journal.name, order.sale_journal.id, ))
- for payment in order.statement_ids:
- # Create one entry for the payment
- if payment.is_acc:
- continue
- account_move_obj.create(cr, uid, {
- 'journal_id': payment.statement_id.journal_id.id,
- 'period_id': period,
- }, context=context)
-
- for stat_l in order.statement_ids:
- if stat_l.is_acc and len(stat_l.move_ids):
- for st in stat_l.move_ids:
- for s in st.line_id:
- if s.credit:
- account_move_line_obj.copy(cr, uid, s.id, {
- 'debit': s.credit,
- 'statement_id': False,
- 'credit': s.debit
- })
- account_move_line_obj.copy(cr, uid, s.id, {
- 'statement_id': False,
- 'account_id': order_account
- })
-
- self.write(cr, uid, order.id, {'state':'done'}, context=context)
+ self.write(cr, uid, order.id, {'state':'done', 'account_move': move_id}, context=context)
return True
- def cancel_picking(self, cr, uid, ids, context=None):
- stock_picking_obj = self.pool.get('stock.picking')
- for order in self.browse(cr, uid, ids, context=context):
- for picking in order.pickings:
- stock_picking_obj.unlink(cr, uid, [picking.id], context=context)
- return True
-
-
def action_payment(self, cr, uid, ids, context=None):
- vals = {'state': 'payment'}
- sequence_obj = self.pool.get('ir.sequence')
- for pos in self.browse(cr, uid, ids, context=context):
- create_contract_nb = False
- for line in pos.lines:
- if line.product_id.product_type == 'MD':
- create_contract_nb = True
- break
- if create_contract_nb:
- seq = sequence_obj.get(cr, uid, 'pos.user_%s' % pos.user_salesman_id.login)
- vals['contract_number'] = '%s-%s' % (pos.user_salesman_id.login, seq)
- self.write(cr, uid, ids, vals, context=context)
+ return self.write(cr, uid, ids, {'state': 'payment'}, context=context)
def action_paid(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- if context.get('flag', False):
- self.create_picking(cr, uid, ids, context=None)
- self.write(cr, uid, ids, {'state': 'paid'}, context=context)
- else:
- context['flag'] = True
+ context = context or {}
+ self.create_picking(cr, uid, ids, context=None)
+ self.write(cr, uid, ids, {'state': 'paid'}, context=context)
return True
def action_cancel(self, cr, uid, ids, context=None):
@@ -929,43 +565,25 @@ class pos_order(osv.osv):
return True
def action_done(self, cr, uid, ids, context=None):
- for order in self.browse(cr, uid, ids, context=context):
- if not order.journal_entry:
- self.create_account_move(cr, uid, ids, context=None)
+ self.create_account_move(cr, uid, ids, context=context)
return True
- def compute_state(self, cr, uid, id):
- cr.execute("SELECT act.id, act.name FROM wkf_activity act "
- "INNER JOIN wkf_workitem item ON act.id = item.act_id "
- "INNER JOIN wkf_instance inst ON item.inst_id = inst.id "
- "INNER JOIN wkf ON inst.wkf_id = wkf.id "
- "WHERE wkf.osv = 'pos.order' AND inst.res_id = %s "
- "ORDER BY act.name", (id, ))
- return [name for id, name in cr.fetchall()]
-
pos_order()
class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
_columns= {
- 'user_id': fields.many2one('res.users', ondelete='cascade', string='User', readonly=True),
+ 'user_id': fields.many2one('res.users', 'User', readonly=True),
}
_defaults = {
- 'user_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).id
+ 'user_id': lambda self,cr,uid,c={}: uid
}
account_bank_statement()
class account_bank_statement_line(osv.osv):
_inherit = 'account.bank.statement.line'
- def _get_statement_journal(self, cr, uid, ids, context, *a):
- res = {}
- for line in self.browse(cr, uid, ids):
- res[line.id] = line.statement_id and line.statement_id.journal_id and line.statement_id.journal_id.name or None
- return res
_columns= {
- 'journal_id': fields.function(_get_statement_journal,store=True, string='Journal', type='char', size=64),
- 'am_out': fields.boolean("To count"),
- 'is_acc': fields.boolean("Is accompte"),
+ 'journal_id': fields.related('statement_id','journal_id','name', store=True, string='Journal', type='char', size=64),
'pos_statement_id': fields.many2one('pos.order', ondelete='cascade'),
}
account_bank_statement_line()
@@ -973,275 +591,84 @@ account_bank_statement_line()
class pos_order_line(osv.osv):
_name = "pos.order.line"
_description = "Lines of Point of Sale"
-
- def _get_amount(self, cr, uid, ids, field_name, arg, context=None):
- res = {}
- for line in self.browse(cr, uid, ids, context=context):
- price = self.price_by_product(cr, uid, ids, line.order_id.pricelist_id.id, line.product_id.id, line.qty, line.order_id.partner_id.id)
- res[line.id] = price
- return res
-
- def _amount_line_ttc(self, cr, uid, ids, field_name, arg, context=None):
- res = dict.fromkeys(ids, 0.0)
- account_tax_obj = self.pool.get('account.tax')
- self.price_by_product_multi(cr, uid, ids)
- for line in self.browse(cr, uid, ids, context=context):
- tax_amount = 0.0
- taxes = [t for t in line.product_id.taxes_id]
- if line.qty == 0.0:
- continue
- computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, line.price_unit, line.qty)['taxes']
- for tax in computed_taxes:
- tax_amount += tax['amount']
- if line.discount != 0.0:
- res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id] = line.price_unit*line.qty
- res[line.id] = res[line.id] + tax_amount
- return res
-
- def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
- res = {}
- self.price_by_product_multi(cr, uid, ids)
- for line in self.browse(cr, uid, ids, context=context):
- if line.discount!=0.0:
- res[line.id] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id] = line.price_unit * line.qty
- return res
+ _rec_name = "product_id"
def _amount_line_all(self, cr, uid, ids, field_names, arg, context=None):
res = dict([(i, {}) for i in ids])
account_tax_obj = self.pool.get('account.tax')
-
- self.price_by_product_multi(cr, uid, ids)
+ cur_obj = self.pool.get('res.currency')
for line in self.browse(cr, uid, ids, context=context):
- for f in field_names:
- if f == 'price_subtotal':
- if line.discount != 0.0:
- res[line.id][f] = line.price_unit * line.qty * (1 - (line.discount or 0.0) / 100.0)
- else:
- res[line.id][f] = line.price_unit * line.qty
- elif f == 'price_subtotal_incl':
- taxes = [t for t in line.product_id.taxes_id]
- if line.qty == 0.0:
- res[line.id][f] = 0.0
- continue
- price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
- computed_taxes = account_tax_obj.compute_all(cr, uid, taxes, price, line.qty)
- cur = line.order_id.pricelist_id.currency_id
- res[line.id][f] = self.pool.get('res.currency').round(cr, uid, cur, computed_taxes['total'])
+ taxes = line.product_id.taxes_id
+ price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
+ taxes = account_tax_obj.compute_all(cr, uid, line.product_id.taxes_id, price, line.qty, product=line.product_id, partner=line.order_id.partner_id or False)
+
+ cur = line.order_id.pricelist_id.currency_id
+ res[line.id]['price_subtotal'] = cur_obj.round(cr, uid, cur, taxes['total'])
+ res[line.id]['price_subtotal_incl'] = cur_obj.round(cr, uid, cur, taxes['total_included'])
return res
- def price_by_product_multi(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- res = {}.fromkeys(ids, 0.0)
- lines = self.browse(cr, uid, ids, context=context)
+ def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False, context=None):
+ context = context or {}
+ if not product_id:
+ return {}
+ if not pricelist:
+ raise osv.except_osv(_('No Pricelist !'),
+ _('You have to select a pricelist in the sale form !\n' \
+ 'Please set one before choosing a product.'))
- pricelist_ids = [line.order_id.pricelist_id.id for line in lines]
- products_by_qty_by_partner = [(line.product_id.id, line.qty, line.order_id.partner_id.id) for line in lines]
+ price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist],
+ product_id, qty or 1.0, partner_id)[pricelist]
- price_get_multi_res = self.pool.get('product.pricelist').price_get_multi(cr, uid, pricelist_ids, products_by_qty_by_partner, context=context)
+ result = self.onchange_qty(cr, uid, ids, product_id, 0.0, qty, price, context=context)
+ result['value']['price_unit'] = price
+ return result
- for line in lines:
- pricelist = line.order_id.pricelist_id.id
- product_id = line.product_id
+ def onchange_qty(self, cr, uid, ids, product, discount, qty, price_unit, context=None):
+ result = {}
+ if not product:
+ return result
+ account_tax_obj = self.pool.get('account.tax')
+ cur_obj = self.pool.get('res.currency')
- if not product_id:
- res[line.id] = 0.0
- continue
- if not pricelist:
- raise osv.except_osv(_('No Pricelist !'),
- _('You have to select a pricelist in the sale form !\n' \
- 'Please set one before choosing a product.'))
+ prod = self.pool.get('product.product').browse(cr, uid, product, context=context)
- #old_price = self.pool.get('product.pricelist').price_get(cr, uid, [pricelist], product_id.id, qty or 1.0, partner_id, {'uom': uom_id})[pricelist]
- #print "prod_id: %s, pricelist: %s, price: %s" % (product_id.id, pricelist, price)
- price = price_get_multi_res[line.product_id.id][pricelist]
- #print "prod_id: %s, pricelist: %s, price2: %s" % (product_id.id, pricelist, price2)
+ taxes = prod.taxes_id
+ price = price_unit * (1 - (discount or 0.0) / 100.0)
+ taxes = account_tax_obj.compute_all(cr, uid, prod.taxes_id, price, qty, product=prod, partner=False)
- #if old_price != price:
- # raise Exception('old_price != price')
-
- unit_price = price or product_id.list_price
- res[line.id] = unit_price
- if unit_price is False:
- raise osv.except_osv(_('No valid pricelist line found !'),
- _("Couldn't find a pricelist line matching this product" \
- " and quantity.\nYou have to change either the product," \
- " the quantity or the pricelist."))
- return res
-
- def price_by_product(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False):
- if not product_id:
- return 0.0
- if not pricelist:
- raise osv.except_osv(_('No Pricelist !'),
- _('You have to select a pricelist in the sale form !\n' \
- 'Please set one before choosing a product.'))
- p_obj = self.pool.get('product.product').browse(cr, uid, [product_id])[0]
- uom_id = p_obj.uom_po_id.id
- price = self.pool.get('product.pricelist').price_get(cr, uid,
- [pricelist], product_id, qty or 1.0, partner_id, {'uom': uom_id})[pricelist]
- unit_price=price or p_obj.list_price
- if unit_price is False:
- raise osv.except_osv(_('No valid pricelist line found !'),
- _("Couldn't find a pricelist line matching this product" \
- " and quantity.\nYou have to change either the product," \
- " the quantity or the pricelist."))
- return unit_price
-
- def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False):
- price = self.price_by_product(cr, uid, ids, pricelist, product_id, qty, partner_id)
- self.write(cr, uid, ids, {'price_unit':price})
- pos_stot = (price * qty)
- return {'value': {'price_unit': price, 'price_subtotal_incl': pos_stot}}
-
- def onchange_subtotal(self, cr, uid, ids, discount, price, pricelist, qty,partner_id, product_id, *a):
- prod_obj = self.pool.get('product.product')
- price_f = self.price_by_product(cr, uid, ids, pricelist, product_id, qty, partner_id)
- prod_id = ''
- if product_id:
- prod_id = prod_obj.browse(cr, uid, product_id).disc_controle
- disc = 0.0
- if (disc != 0.0 or prod_id) and price_f > 0:
- disc = 100 - (price/price_f*100)
- return {'value': {'discount': disc, 'price_unit': price_f}}
- return {}
-
- def onchange_ded(self, cr, uid, ids, val_ded, price_u, *a):
- res_obj = self.pool.get('res.users')
- comp = res_obj.browse(cr, uid, uid).company_id.company_discount or 0.0
- val = 0.0
- if val_ded and price_u:
- val=100.0 * val_ded / price_u
- if val > comp:
- return {'value': {'discount': val, 'notice': '' }}
- return {'value': {'discount': val}}
-
- def onchange_discount(self, cr, uid, ids, discount, price, *a):
- pos_order = self.pool.get('pos.order.line')
- res_obj = self.pool.get('res.users')
- company_disc = pos_order.browse(cr,uid,ids)
- if discount:
- if not company_disc:
- comp=res_obj.browse(cr,uid,uid).company_id.company_discount or 0.0
- else:
- comp= company_disc[0] and company_disc[0].order_id.company_id and company_disc[0].order_id.company_id.company_discount or 0.0
-
- if discount > comp :
- return {'value': {'notice': '', 'price_ded': price * discount * 0.01 or 0.0 }}
- else:
- return {'value': {'notice': 'Minimum Discount', 'price_ded': price * discount * 0.01 or 0.0 }}
- else :
- return {'value': {'notice': 'No Discount', 'price_ded': price * discount * 0.01 or 0.0}}
-
- def onchange_qty(self, cr, uid, ids, discount, qty, price, context=None):
- subtotal = qty * price
- if discount:
- subtotal = subtotal - (subtotal * discount / 100)
- return {'value': {'price_subtotal_incl': subtotal}}
+ result['price_subtotal'] = taxes['total']
+ result['price_subtotal_incl'] = taxes['total_included']
+ return {'value': result}
_columns = {
- 'name': fields.char('Line Description', size=512),
'company_id': fields.many2one('res.company', 'Company', required=True),
- 'notice': fields.char('Discount Notice', size=128, required=True),
- 'serial_number': fields.char('Serial Number', size=128),
+ 'name': fields.char('Line No', size=32, required=True),
+ 'notice': fields.char('Discount Notice', size=128),
'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], required=True, change_default=True),
- 'price_unit': fields.function(_get_amount, string='Unit Price', store=True),
- 'price_ded': fields.float('Discount(Amount)', digits_compute=dp.get_precision('Point Of Sale')),
- 'qty': fields.float('Quantity'),
- 'qty_rfd': fields.float('Refunded Quantity'),
- 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax'),
- 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal'),
+ 'price_unit': fields.float(string='Unit Price', digits=(16, 2)),
+ 'qty': fields.float('Quantity', digits=(16, 2)),
+ 'price_subtotal': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal w/o Tax', store=True),
+ 'price_subtotal_incl': fields.function(_amount_line_all, multi='pos_order_line_amount', string='Subtotal', store=True),
'discount': fields.float('Discount (%)', digits=(16, 2)),
'order_id': fields.many2one('pos.order', 'Order Ref', ondelete='cascade'),
'create_date': fields.datetime('Creation Date', readonly=True),
- 'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', help="You can specify Production lot for stock move created when you validate the pos order"),
}
_defaults = {
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'pos.order.line'),
'qty': lambda *a: 1,
'discount': lambda *a: 0.0,
- 'price_ded': lambda *a: 0.0,
- 'notice': lambda *a: 'No Discount',
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
- }
+ }
- def create(self, cr, user, vals, context=None):
- if vals.get('product_id'):
- return super(pos_order_line, self).create(cr, user, vals, context=context)
- return False
-
- def write(self, cr, user, ids, values, context=None):
- if 'product_id' in values and not values['product_id']:
- return False
- return super(pos_order_line, self).write(cr, user, ids, values, context=context)
-
def copy_data(self, cr, uid, id, default=None, context=None):
if not default:
default = {}
default.update({
- 'prodlot_id': False,
'name': self.pool.get('ir.sequence').get(cr, uid, 'pos.order.line')
})
return super(pos_order_line, self).copy_data(cr, uid, id, default, context=context)
- def _scan_product(self, cr, uid, ean, qty, order):
- # search pricelist_id
- product_obj = self.pool.get('product.product')
- pricelist_id = self.pool.get('pos.order').read(cr, uid, [order], ['pricelist_id'] )
- if not pricelist_id:
- return False
-
- new_line = True
-
- product_id = product_obj.search(cr, uid, [('ean13','=', ean)])
- if not product_id:
- return False
-
- # search price product
- product = product_obj.read(cr, uid, product_id)
- product_name = product[0]['name']
- price = self.price_by_product(cr, uid, 0, pricelist_id[0]['pricelist_id'][0], product_id[0], 1)
-
- order_line_ids = self.search(cr, uid, [('name', '=', product_name), ('order_id', '=' ,order)])
- if order_line_ids:
- new_line = False
- order_line_id = order_line_ids[0]
- qty += self.read(cr, uid, order_line_ids[0], ['qty'])['qty']
-
- if new_line:
- vals = {'product_id': product_id[0],
- 'price_unit': price,
- 'qty': qty,
- 'name': product_name,
- 'order_id': order,
- }
- line_id = self.create(cr, uid, vals)
- if not line_id:
- raise osv.except_osv(_('Error'), _('Create line failed !'))
- else:
- vals = {
- 'qty': qty,
- 'price_unit': price
- }
- line_id = self.write(cr, uid, order_line_id, vals)
- if not line_id:
- raise osv.except_osv(_('Error'), _('Modify line failed !'))
- line_id = order_line_id
-
- price_line = float(qty) * float(price)
- return {
- 'name': product_name,
- 'product_id': product_id[0],
- 'price': price,
- 'price_line': price_line ,
- 'qty': qty
- }
-
pos_order_line()
class product_product(osv.osv):
@@ -1249,20 +676,6 @@ class product_product(osv.osv):
_columns = {
'income_pdt': fields.boolean('Product for Input'),
'expense_pdt': fields.boolean('Product for Output'),
- 'am_out': fields.boolean('Control for Output Operations'),
- 'disc_controle': fields.boolean('Discount Control'),
- }
- _defaults = {
- 'disc_controle': True,
}
product_product()
-class stock_picking(osv.osv):
- _inherit = 'stock.picking'
- _columns = {
- 'pos_order': fields.many2one('pos.order', 'Pos order'),
- }
-
-stock_picking()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/point_of_sale_demo.xml b/addons/point_of_sale/point_of_sale_demo.xml
index e95ce05256f..fe38cb98cb1 100644
--- a/addons/point_of_sale/point_of_sale_demo.xml
+++ b/addons/point_of_sale/point_of_sale_demo.xml
@@ -4,185 +4,175 @@
-
-
+
+
- buy
-
- Cash In
-
- Cash In
-
-
-
-
- buy
-
- Cash Out
-
- Cash Out
-
-
+ buy
+
+ Cash In
+
+ Cash In
+
+
+
+
+ buy
+
+ Cash Out
+
+ Cash Out
+
+
-
- POS/019
- POS/019
- SAJ/2010/010
-
-
-
-
-
- none
-
- open
- out_invoice
- SAJ/2010/010
-
-
-
- /
-
-
-
-
-
-
- Invoice from POS: POS/019
-
-
-
-
- [PC1] Basic PC
-
-
-
-
-
-
-
-
-
-
-
-
- 2011-04-07
-
-
-
-
-
-
-
-
- paid
-
-
-
- POS/019
- tax_excluded
-
-
-
-
-
-
- 10
- open
-
-
-
-
-
-
-
-
- general
-
-
-
- Cash Journal - (test)
-
-
-
-
-
- Payment POS/019
-
-
-
-
- POS/019
-
-
-
- direct
-
- POS notes
- done
- out
-
-
- OUT/00019
- none
-
-
-
- POS/019
-
-
-
-
-
- 1
-
-
- done
-
-
-
- Stock move (POS 12)
-
-
-
-
-
-
-
- No Discount
-
-
-
-
-
- Order Line/07
-
-
+
+ POS/019
+ POS/019
+ SAJ/2010/010
+
+
+
+
+
+ none
+
+ open
+ out_invoice
+ SAJ/2010/010
+
+
+
+ /
+
+
+
+
+
+
+ Invoice from POS: POS/019
+
+
+
+
+ [PC1] Basic PC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ paid
+
+ POS/019
+ tax_excluded
+
+
+
+
+
+ 10
+ open
+
+
+
+
+
+
+
+
+ general
+
+
+
+ Cash Journal - (test)
+
+
+
+ Payment POS/019
+
+
+
+
+ POS/019
+
+
+
+ direct
+
+ POS notes
+ done
+ out
+
+
+ OUT/00019
+ none
+
+
+
+ POS/019
+
+
+
+
+
+ 1
+
+
+ done
+
+
+
+ Stock move (POS 12)
+
+
+
+
+
+
+
+ No Discount
+
+
+
+
+
+ Order Line/07
+
+
-
+
- tax_excluded
-
-
-
+
+
+
- tax_excluded
-
-
-
-
-
+
+
+
+
+ [PC3] Medium PC
@@ -218,6 +208,6 @@
0.10Discount Applied
-
+
diff --git a/addons/point_of_sale/point_of_sale_report.xml b/addons/point_of_sale/point_of_sale_report.xml
index 3e6a265b34e..b8d5456f1cd 100644
--- a/addons/point_of_sale/point_of_sale_report.xml
+++ b/addons/point_of_sale/point_of_sale_report.xml
@@ -96,17 +96,6 @@
menu="False"
rml="point_of_sale/report/pos_payment_report_user.rml"
/>
-
-
diff --git a/addons/point_of_sale/point_of_sale_sequence.xml b/addons/point_of_sale/point_of_sale_sequence.xml
index 399dccc634f..bf83fe17942 100644
--- a/addons/point_of_sale/point_of_sale_sequence.xml
+++ b/addons/point_of_sale/point_of_sale_sequence.xml
@@ -13,8 +13,8 @@
POS Orderpos.order
- POS/
- 3
+ POS
+ 4
@@ -24,8 +24,8 @@
POS order linepos.order.line
- Order Line/
- 2
+ POSL
+ 4
diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml
index a8552cddc15..ba2d2c0214f 100644
--- a/addons/point_of_sale/point_of_sale_view.xml
+++ b/addons/point_of_sale/point_of_sale_view.xml
@@ -13,51 +13,47 @@
form
-
+
-
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
@@ -74,22 +70,25 @@
-
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -116,8 +115,6 @@
-
-
@@ -132,13 +129,17 @@
search
-
-
+
+
+
+
+
+
+
+
-
-
@@ -153,65 +154,11 @@
-
+
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
-
- ['|',('state','=','advance')]
- {"search_default_user_id":uid}
-
-
-
-
-
- Accepted Sales
- ir.actions.act_window
- pos.order
- form
- tree,form
- [('state','=', 'paid')]
- {"search_default_user_id":uid}
-
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
- [('date_order','<=', time.strftime('%Y-%m-%d 23:59:59'))]
- {"search_default_user_id":uid}
-
-
-
-
- Point of Sale
- ir.actions.act_window
- pos.order
- form
- tree,form
- {"search_default_user_id":uid}
-
-
-
- Opened Sales
- ir.actions.act_window
- pos.order
- form
- form,tree
- {"search_default_user_id":uid}
-
-
-
Sale linespos.order.line
@@ -632,20 +579,6 @@
tree,calendar,form,graph[('date_order','like',time.strftime('%Y-%m'))]
-
-
- view.company.form.pos
- res.company
- form
-
-
-
-
-
-
-
-
- product.normal.form.inherit
@@ -657,8 +590,6 @@
-
-
@@ -693,7 +624,6 @@
-
@@ -712,7 +642,7 @@
id="menu_point_config_product" sequence="25" groups="group_pos_manager"/>
- Products
+ Products 'Take Money Out'ir.actions.act_windowproduct.productform
@@ -731,14 +661,14 @@
-
+
- Products
+ Products 'Put Money In'ir.actions.act_windowproduct.productform
@@ -757,24 +687,37 @@
-
+
+
+ Payment Methods
+ account.journal
+ form
+ tree,form
+ {'default_journal_user': 1}
+ [('journal_user','=', 1)]
+ Payment methods are defined by accounting journals having the field Payment Method checked.
+
+
+
+
POS Sales Linespos.order.line
@@ -782,7 +725,6 @@
-
@@ -802,6 +744,16 @@
+
+ All Sales Orders
+ ir.actions.act_window
+ pos.order
+ form
+ tree,form
+ []
+
+
+
Invoicesir.actions.act_window
diff --git a/addons/point_of_sale/point_of_sale_workflow.xml b/addons/point_of_sale/point_of_sale_workflow.xml
index c325c4951c9..4058af2696f 100644
--- a/addons/point_of_sale/point_of_sale_workflow.xml
+++ b/addons/point_of_sale/point_of_sale_workflow.xml
@@ -69,7 +69,7 @@
-
+ cancel
diff --git a/addons/point_of_sale/report/__init__.py b/addons/point_of_sale/report/__init__.py
index d7355af0357..171f323e337 100644
--- a/addons/point_of_sale/report/__init__.py
+++ b/addons/point_of_sale/report/__init__.py
@@ -32,11 +32,8 @@ import pos_sales_user
import pos_sales_user_today
import pos_payment_report_date
import pos_payment_report_user
-import pos_sales_user_today_current_user
-import pos_receipt_with_remboursment
-import pos_receipt_without_remboursment
import pos_report
import pos_order_report
import report_cash_register
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_details.py b/addons/point_of_sale/report/pos_details.py
index 84f3de8258f..4c23a005674 100644
--- a/addons/point_of_sale/report/pos_details.py
+++ b/addons/point_of_sale/report/pos_details.py
@@ -97,7 +97,7 @@ class pos_details(report_sxw.rml_parse):
def _get_sum_dis_2(self,form,user):
res4=[]
- self.cr.execute ("select sum(pol.price_ded * pol.qty)" \
+ self.cr.execute ("select sum(pol.qty)" \
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt, res_users as ru,res_company as rc " \
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id and po.state IN ('paid') " \
"and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date >= %s and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date <= %s " \
@@ -215,4 +215,4 @@ class pos_details(report_sxw.rml_parse):
report_sxw.report_sxw('report.pos.details', 'pos.order', 'addons/point_of_sale_singer/report/pos_details.rml', parser=pos_details, header='internal')
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_invoice.py b/addons/point_of_sale/report/pos_invoice.py
index 7a89b101956..0e1cd98fb47 100644
--- a/addons/point_of_sale/report/pos_invoice.py
+++ b/addons/point_of_sale/report/pos_invoice.py
@@ -55,4 +55,4 @@ class pos_invoice(report_sxw.rml_parse):
report_sxw.report_sxw('report.pos.invoice', 'pos.order', 'addons/account/report/account_print_invoice.rml', parser= pos_invoice)
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py
index 00681457495..ceb20a11a36 100644
--- a/addons/point_of_sale/report/pos_order_report.py
+++ b/addons/point_of_sale/report/pos_order_report.py
@@ -35,9 +35,7 @@ class pos_order_report(osv.osv):
'day': fields.char('Day', size=128, readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
'product_id':fields.many2one('product.product', 'Product', readonly=True),
- 'state': fields.selection([('draft', 'Draft'), ('payment', 'Payment'),
- ('advance','Advance'),
- ('paid', 'Paid'), ('done', 'Done'), ('invoiced', 'Invoiced'), ('cancel', 'Cancel')],
+ 'state': fields.selection([('draft', 'New'), ('paid', 'Closed'), ('done', 'Synchronized'), ('invoiced', 'Invoiced'), ('cancel', 'Cancelled')],
'State'),
'user_id':fields.many2one('res.users', 'Salesman', readonly=True),
'price_total':fields.float('Total Price', readonly=True),
@@ -49,9 +47,6 @@ class pos_order_report(osv.osv):
'product_qty':fields.integer('# of Qty', readonly=True),
'journal_id': fields.many2one('account.journal', 'Journal'),
'delay_validation': fields.integer('Delay Validation'),
- 'delay_payment': fields.integer('Delay Payment'),
- 'date_validation': fields.date('Validation Date', required=True),
- 'date_payment': fields.date('Payment Date', required=True),
}
_order = 'date desc'
@@ -65,10 +60,9 @@ class pos_order_report(osv.osv):
to_date(to_char(s.date_order, 'dd-MM-YYYY'),'dd-MM-YYYY') as date,
sum(l.qty * u.factor) as product_qty,
sum(l.qty * l.price_unit) as price_total,
- sum(l.qty * l.price_ded) as total_discount,
+ sum(l.qty * l.discount) as total_discount,
(sum(l.qty*l.price_unit)/sum(l.qty * u.factor))::decimal(16,2) as average_price,
- sum(cast(to_char(date_trunc('day',s.date_validation) - date_trunc('day',s.date_order),'DD') as int)) as delay_validation,
- sum(cast(to_char(date_trunc('day',s.date_payment) - date_trunc('day',s.date_order),'DD') as int)) as delay_payment,
+ sum(cast(to_char(date_trunc('day',s.date_order) - date_trunc('day',s.create_date),'DD') as int)) as delay_validation,
to_char(s.date_order, 'YYYY') as year,
to_char(s.date_order, 'MM') as month,
to_char(s.date_order, 'YYYY-MM-DD') as day,
@@ -78,9 +72,7 @@ class pos_order_report(osv.osv):
s.shop_id as shop_id,
s.company_id as company_id,
s.sale_journal as journal_id,
- l.product_id as product_id,
- s.date_validation,
- s.date_payment
+ l.product_id as product_id
from pos_order_line as l
left join pos_order s on (s.id=l.order_id)
left join product_template pt on (pt.id=l.product_id)
@@ -88,11 +80,10 @@ class pos_order_report(osv.osv):
group by
to_char(s.date_order, 'dd-MM-YYYY'),to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'),
to_char(s.date_order, 'YYYY-MM-DD'), s.partner_id,s.state,
- s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.date_validation,
- s.date_payment
+ s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.create_date
having
sum(l.qty * u.factor) != 0)""")
pos_order_report()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_order_report_view.xml b/addons/point_of_sale/report/pos_order_report_view.xml
index 8b18bf0b57a..41fe2c3b4d6 100644
--- a/addons/point_of_sale/report/pos_order_report_view.xml
+++ b/addons/point_of_sale/report/pos_order_report_view.xml
@@ -2,65 +2,62 @@
- report.pos.order.tree
- report.pos.order
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
+ report.pos.order.tree
+ report.pos.order
+ tree
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
- report.pos.order.search
- report.pos.order
- search
-
-
-
-
-
-
-
- report.pos.order.search
+ report.pos.order
+ search
+
+
+
+
+
+
+
+
-
+
-
+
@@ -69,36 +66,31 @@
help="My Sales"
domain="[('user_id','=',uid)]"/>
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
- Point of Sale Analysis
- report.pos.order
- form
- tree,graph
-
- {'search_default_today':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
-
+ Point of Sale Analysis
+ report.pos.order
+ form
+ tree,graph
+
+ {'search_default_today':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+
-
-
+
+
diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml
index b9da3f5e9a6..e3b5583a499 100644
--- a/addons/point_of_sale/report/pos_receipt.rml
+++ b/addons/point_of_sale/report/pos_receipt.rml
@@ -77,7 +77,6 @@
Tel : [[ address and address.phone ]]E-mail : [[ address and address.email ]]Shop : [[ o.shop_id.name ]]
- Vendeur : [[ o.user_salesman_id.name ]]Date : [[ o.date_order ]]
@@ -85,12 +84,10 @@
- [[o.type_rec]]N° : [[ o.name ]]
- Contract : [[ o.contract_number ]]
@@ -165,6 +162,5 @@
- [[o.note_2]]
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.py b/addons/point_of_sale/report/pos_receipt_with_remboursment.py
deleted file mode 100644
index c600a9e2754..00000000000
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import time
-from report import report_sxw
-import pooler
-
-class order(report_sxw.rml_parse):
-
- def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context=context)
-
- user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
- partner = user.company_id.partner_id
-
- self.localcontext.update({
- 'time': time,
- 'disc': self.discount,
- 'net': self.netamount,
- 'get_journal_amt': self._get_journal_amt,
- 'address': partner.address and partner.address[0] or False,
- })
-
- def netamount(self, order_line_id):
- sql = 'select (qty*price_unit) as net_price from pos_order_line where id = %s'
- self.cr.execute(sql, (order_line_id,))
- res = self.cr.fetchone()
- return res[0]
-
- def discount(self, order_id):
- sql = 'select discount, price_unit, qty from pos_order_line where order_id = %s '
- self.cr.execute(sql, (order_id,))
- res = self.cr.fetchall()
- dsum = 0
- for line in res:
- if line[0] != 0:
- dsum = dsum +(line[2] * (line[0]*line[1]/100))
- return dsum
-
- def _get_journal_amt(self, order_id):
- lst=[]
- sql = """ select aj.name from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- WHERE absl.pos_statement_id = %d"""%(order_id.id)
- self.cr.execute(sql)
- res = self.cr.fetchone()
- if not res:
- return ['', 0.0]
- lst.append(res[0]) # todo: improve
- sql2 = """ select sum(absl.amount) as amt from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- where aj.name = '%s' """%(res[0])
- self.cr.execute(sql2)
- res1 = self.cr.fetchone()
- if res1:
- lst.append(res1[0])
- else:
- lst.append(0.0)
- return lst
-
-report_sxw.report_sxw('report.pos.receipt.with.remboursment', 'pos.order', 'addons/point_of_sale/report/pos_receipt_with_remboursment.rml', parser=order, header=False)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
deleted file mode 100644
index 9c25d5f4a89..00000000000
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ repeatIn(objects,'o') ]]
- [[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- [[ address and address.country_id.name ]]
- Tel : [[ address and address.phone ]]
- E-mail : [[ address and address.email ]]
- Salesman : [[ o.user_id.name ]]
- Sale Date : [[ o.date_order ]]
- Refund Receipt: [[o.name]]
-
-
-
-
-
-
-
- Description
-
-
- Qty
-
-
- Price
-
-
-
-
- [[ repeatIn(o.lines,'line') ]]
-
-
-
-
- [[ line.product_id.name ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.f' % line.discount ]]%)
-
-
-
-
-
-
-
- Disc :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % (disc(o.id) or 0.0,) ]]
-
-
-
-
- Total :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total ]] [[ o.pricelist_id.currency_id.name ]]
-
-
-
- [[ get_journal_amt(o)[1] ]]
-
-
-
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.py b/addons/point_of_sale/report/pos_receipt_without_remboursment.py
deleted file mode 100644
index d2fe0f1d542..00000000000
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import time
-from report import report_sxw
-import pooler
-
-class order(report_sxw.rml_parse):
-
- def __init__(self, cr, uid, name, context):
- super(order, self).__init__(cr, uid, name, context=context)
-
- user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid)
- partner = user.company_id.partner_id
-
- self.localcontext.update({
- 'time': time,
- 'disc': self.discount,
- 'net': self.netamount,
- 'get_journal_amt': self._get_journal_amt,
- 'address': partner.address and partner.address[0] or False,
- })
-
- def netamount(self, order_line_id):
- sql = 'select (qty*price_unit) as net_price from pos_order_line where id = %s'
- self.cr.execute(sql, (order_line_id,))
- res = self.cr.fetchone()
- return res[0]
-
- def discount(self, order_id):
- sql = 'select discount, price_unit, qty from pos_order_line where order_id = %s '
- self.cr.execute(sql, (order_id,))
- res = self.cr.fetchall()
- dsum = 0
- for line in res:
- if line[0] != 0:
- dsum = dsum +(line[2] * (line[0]*line[1]/100))
- return dsum
-
- def _get_journal_amt(self, order_id):
- lst=[]
- sql = """ select aj.name from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- WHERE absl.pos_statement_id = %d"""%(order_id.id)
- self.cr.execute(sql)
- res = self.cr.fetchone()
- if not res:
- return ['', 0.0]
- lst.append(res[0]) # todo: improve
- sql2 = """ select sum(absl.amount) as amt from account_bank_statement as abs
- LEFT JOIN account_bank_statement_line as absl ON abs.id = absl.statement_id
- LEFT JOIN account_journal as aj ON aj.id = abs.journal_id
- where aj.name = '%s' """%(res[0])
- self.cr.execute(sql2)
- res1 = self.cr.fetchone()
- if res1:
- lst.append(res1[0])
- else:
- lst.append(0.0)
- return lst
-
-report_sxw.report_sxw('report.pos.receipt.without.remboursment', 'pos.order', 'addons/point_of_sale/report/pos_receipt_without_remboursment.rml', parser=order, header=False)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
deleted file mode 100644
index ff6ebc3132c..00000000000
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
+++ /dev/null
@@ -1,138 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'o') ]]
- [[ repeatIn(objects,'o') ]]
- [[o.user_id.company_id.name]]
- [[ address and address.street ]], [[ address and address.zip ]] [[ address and address.city ]]
- [[ address and address.country_id.name ]]
- Tel : [[ address and address.phone ]]
- E-mail : [[ address and address.email ]]
- Salesman : [[ o.user_id.name ]]
- Sale Date : [[ str(o.date_order) ]]
- Purchase Voucher : [[o.name]]
-
-
-
-
-
-
-
- Description
-
-
- Qty
-
-
- Price
-
-
-
-
- [[ repeatIn(o.lines,'line') ]]
-
-
-
-
- [[ line.product_id.name ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.f' % line.discount ]]%)
-
-
-
-
-
-
-
- Disc :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % (disc(o.id) or 0.0,) ]]
-
-
-
-
- Total :
-
-
- [[o.state=='cancel' and o.statement_ids and '-' or '']][['%.2f' % o.amount_total ]] [[ o.pricelist_id.currency_id.name ]]
-
-
-
- [[ get_journal_amt(o)[0] ]] : [[ get_journal_amt(o)[1] ]]
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/report/pos_report.py b/addons/point_of_sale/report/pos_report.py
index cd41eb92944..1ecf80ea519 100644
--- a/addons/point_of_sale/report/pos_report.py
+++ b/addons/point_of_sale/report/pos_report.py
@@ -49,7 +49,7 @@ class report_transaction_pos(osv.osv):
min(absl.id) as id,
count(absl.id) as no_trans,
sum(absl.amount) as amount,
- sum(line.price_ded) as disc,
+ sum((100.0-line.discount) * line.price_unit * line.qty / 100.0) as disc,
to_char(date_trunc('day',absl.create_date),'YYYY-MM-DD')::text as date_create,
po.user_id as user_id,
po.sale_journal as journal_id,
@@ -236,4 +236,4 @@ class report_sales_by_margin_pos_month(osv.osv):
""")
report_sales_by_margin_pos_month()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.py b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
deleted file mode 100644
index 07cbdcbc488..00000000000
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import time
-from report import report_sxw
-
-class pos_sales_user_today_current_user(report_sxw.rml_parse):
-
- def __init__(self, cr, uid, name, context):
- super(pos_sales_user_today_current_user, self).__init__(cr, uid, name, context=context)
- self.total = 0.0
- self.qty = 0.0
- self.localcontext.update({
- 'time': time,
- 'get_user':self._get_user,
- 'get_data_current_user':self._get_data_current_user,
- 'get_data_current_user_tot':self._get_data_current_user_tot,
- 'get_data_current_user_qty':self._get_data_current_user_qty,
- })
-
- def _get_user(self, user):
- pos_user={}
- self.cr.execute("select name from res_users where id = %s",str(self.uid))
- pos_user=self.cr.dictfetchone()
- return pos_user['name']
-
- def _get_data_current_user(self, user):
- data={}
- self.cr.execute("select po.name,po. state,sum(pol.qty)as Qty,sum((pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0))) as Total " \
- "from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt, res_users as ru,res_company as rc " \
- "where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
- "and to_char(date_trunc('day',po.date_order),'YYYY-MM-DD')::date = current_date and po.user_id = ru.id and rc.id = %s and ru.id = %s " \
- "group by po.name, po.state " \
- ,(str(user.company_id.id),str(self.uid)))
-
- data = self.cr.dictfetchall()
- for d in data:
- self.total += d['total']
- self.qty += d['qty']
- return data
-
- def _get_data_current_user_tot(self, user):
- return self.total
-
- def _get_data_current_user_qty(self, user):
- return self.qty
-
-report_sxw.report_sxw('report.pos.sales.user.today.current.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today_current_user.rml', parser=pos_sales_user_today_current_user,header='internal')
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml b/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
deleted file mode 100644
index 7a94f5d6632..00000000000
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
+++ /dev/null
@@ -1,204 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[ repeatIn(objects,'order') ]]
-
-
-
-
-
-
- Today's Sales By Current User
-
-
-
-
-
- [[ formatLang((get_data_current_user_tot(user))) or removeParentNode('blockTable')]] [[company.currency_id.symbol]]
-
-
-
-
-
-
-
-
diff --git a/addons/point_of_sale/test/00_register_open.yml b/addons/point_of_sale/test/00_register_open.yml
new file mode 100644
index 00000000000..7d5aabbcdc3
--- /dev/null
+++ b/addons/point_of_sale/test/00_register_open.yml
@@ -0,0 +1,17 @@
+-
+ In order to test the Point of Sale module, I will open all cash registers through the wizard
+-
+ I go to the window to open the cash registers as admin
+-
+ !record {model: pos.open.statement, id: new_statement_open}:
+-
+ I click on the button to open all statements/cash registers
+-
+ !python {model: pos.open.statement}: |
+ self.open_statement(cr, uid, [ref('new_statement_open')], context={})
+-
+ I check that I have some bank statements open for the admin user
+-
+ !python {model: account.bank.statement}: |
+ ids = self.search(cr, uid, [('state', 'in', ('open','new')), ('user_id', '=', 1)])
+ assert (len(ids)>0), 'No statement open for the admin user!'
diff --git a/addons/point_of_sale/test/01_order_to_payment.yml b/addons/point_of_sale/test/01_order_to_payment.yml
new file mode 100644
index 00000000000..fd8ffbaa3e0
--- /dev/null
+++ b/addons/point_of_sale/test/01_order_to_payment.yml
@@ -0,0 +1,124 @@
+- |
+ In order to test the Point of Sale in module, I will do a full flow from the sale to the payment and invoicing.
+ I will use two products, one with price including a 10% tax, the other one with 5% tax excluded from the price.
+- |
+ I create a VAT tax of 10%, included in the public price
+-
+ !record {model: account.tax, id: account_tax_10_incl}:
+ name: VAT 10 perc Incl
+ type: percent
+ amount: 0.10
+ account_paid_id: account.iva
+ account_collected_id: account.iva
+ price_include: 1
+-
+ I assign this 10 percent tax on the PC1 product as a sale tax
+-
+ !record {model: product.product, id: product.product_product_pc1}:
+ taxes_id: [account_tax_10_incl]
+- |
+ I create a VAT tax of 5%, which is added to the public price
+-
+ !record {model: account.tax, id: account_tax_05_incl}:
+ name: VAT 05 perc Excl
+ type: percent
+ amount: 0.05
+ account_paid_id: account.iva
+ account_collected_id: account.iva
+ price_include: 0
+-
+ I assign this 5 percent tax on the PC2 product as a sale tax
+-
+ !record {model: product.product, id: product.product_product_pc2}:
+ taxes_id: [account_tax_05_incl]
+-
+ I create a PoS order with 2 units of PC1 at 450 EUR (Tax Incl) and 3 units of PC2 at 300 EUR. (Tax Excl)
+-
+ !record {model: pos.order, id: pos_order_pos0}:
+ company_id: base.main_company
+ lines:
+ - name: OL/0001
+ product_id: product.product_product_pc1
+ price_unit: 450
+ discount: 0.0
+ qty: 2.0
+ - name: OL/0002
+ product_id: product.product_product_pc2
+ price_unit: 300
+ discount: 0.0
+ qty: 3.0
+-
+ I check that the total of the order is equal to 450*2 + 300*3*1.05 and the tax of the order is equal to 900 -(450 * 2 / 1.1) + 300*0.05*3
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr, uid, ref('pos_order_pos0'))
+ assert(abs(order.amount_total - (450*2 + 300*3*1.05)) < 0.01), "The order has a wrong amount, tax included"
+ assert(abs(order.amount_tax - (900-(450*2/1.1) + 300*0.05*3)) < 0.01), "The order has a wrong tax amount"
+-
+ I want to add a global discount of 5 percent using the wizard
+-
+ !record {model: pos.discount, id: pos_discount_0}:
+ discount: 5.0
+-
+ I click the apply button to set the discount on all lines
+-
+ !python {model: pos.discount}: |
+ self.apply_discount(cr, uid, [ref("pos_discount_0")], {"active_model": "pos.order",
+ "active_ids": [ref("pos_order_pos0")], "active_id": ref("pos_order_pos0"), })
+-
+ I check that the total of the order is now equal to (450*2 + 300*3*1.05)*0.95
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr, uid, ref('pos_order_pos0'))
+ assert(abs(order.amount_total - (450*2 + 300*3*1.05)*0.95) < 0.01), "The order has a wrong total including tax and discounts"
+-
+ I click on the "Make Payment" wizard to pay the PoS order with a partial amount of 100.0 EUR
+-
+ !record {model: pos.make.payment, id: pos_make_payment_0, context: {'active_id': ref('pos_order_pos0'), 'active_ids': [ref('pos_order_pos0')]} }:
+ amount: 100.0
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_0')], context={'active_id': ref('pos_order_pos0'), 'lang':'en_US', 'active_model': 'pos.order', 'tz': False, 'active_ids': [ref('pos_order_pos0')]} )
+- |
+ I check that the order is not marked as paid yet
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - state == 'draft'
+- |
+ On the second payment proposition, I check that it proposes me the remaining balance which is 1790.0 EUR
+-
+ !python {model: pos.make.payment}: |
+ defs = self.default_get(cr, uid, ['amount'], {'active_id': ref('pos_order_pos0')})
+ assert abs(defs['amount'] - ((450*2 + 300*3*1.05)*0.95-100.0)) < 0.01, "The remaining balance is incorrect"
+-
+ I pay the remaining balance.
+-
+ !record {model: pos.make.payment, id: pos_make_payment_1, context: {'active_id': [ref('pos_order_pos0')], 'active_ids': [ref('pos_order_pos0')]} }:
+ amount: !eval >
+ (450*2 + 300*3*1.05)*0.95-100.0
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_1')], context={'active_id': ref('pos_order_pos0')} )
+- |
+ I check that the order is marked as paid
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - state == 'paid'
+-
+ I generate the journal entries
+-
+ !python {model: pos.order}: |
+ self.create_account_move(cr, uid, [ref('pos_order_pos0')], {})
+-
+ I test that the generated journal entry is attached to the PoS order
+-
+ !assert {model: pos.order, id: pos_order_pos0}:
+ - bool(account_move)
+
+
+
+
diff --git a/addons/point_of_sale/test/02_order_to_invoice.yml b/addons/point_of_sale/test/02_order_to_invoice.yml
new file mode 100644
index 00000000000..3436e176678
--- /dev/null
+++ b/addons/point_of_sale/test/02_order_to_invoice.yml
@@ -0,0 +1,47 @@
+-
+ I create a new PoS order with 2 units of PC1 at 450 EUR (Tax Incl) and 3 units of PC2 at 300 EUR. (Tax Excl)
+-
+ !record {model: pos.order, id: pos_order_pos1}:
+ company_id: base.main_company
+ partner_id: base.res_partner_asus
+ lines:
+ - name: OL/0001
+ product_id: product.product_product_pc1
+ price_unit: 450
+ discount: 5.0
+ qty: 2.0
+ - name: OL/0002
+ product_id: product.product_product_pc2
+ price_unit: 300
+ discount: 5.0
+ qty: 3.0
+-
+ I click on the "Make Payment" wizard to pay the PoS order
+-
+ !record {model: pos.make.payment, id: pos_make_payment_2, context: {'active_id': ref('pos_order_pos1'), 'active_ids': [ref('pos_order_pos1')]} }:
+ amount: !eval >
+ (450*2 + 300*3*1.05)*0.95
+-
+ I click on the validate button to register the payment.
+-
+ !python {model: pos.make.payment}: |
+ self.check(cr, uid, [ref('pos_make_payment_2')], context={'active_id': ref('pos_order_pos1')} )
+- |
+ I check that the order is marked as paid and there is no invoice attached to it
+-
+ !python {model: pos.order}: |
+ order = self.browse(cr,uid,ref('pos_order_pos1'))
+-
+ !assert {model: pos.order, id: pos_order_pos1, string: State not correct}:
+ - state == 'paid'
+ - not invoice_id
+-
+ I generate the invoice by pressing the Invoice button that calls the workflow
+-
+ !workflow {model: pos.order, action: invoice, ref: pos_order_pos1}
+-
+ I test that the total of the attached invoice is correct
+-
+ !assert {model: pos.order, id: pos_order_pos1, string: Invoice not correct}:
+ - bool(invoice_id)
+ - invoice_id.amount_total == (450*2 + 300*3*1.05)*0.95
diff --git a/addons/point_of_sale/test/point_of_sale_report.yml b/addons/point_of_sale/test/point_of_sale_report.yml
index b821dc899df..f31f9ec0f49 100644
--- a/addons/point_of_sale/test/point_of_sale_report.yml
+++ b/addons/point_of_sale/test/point_of_sale_report.yml
@@ -34,24 +34,6 @@
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Receipt With Reimbursement Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.pos.receipt.with.remboursment').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt with reimbursement report'+format), 'wb+').write(data)
-
--
- In order to test the PDF reports defined on a point of sale, we will print a POS Receipt Without Reimbursement Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os
- (data, format) = netsvc.LocalService('report.pos.receipt.without.remboursment').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-receipt without reimbursement report'+format), 'wb+').write(data)
-
-
Print the POS Payment Report through the wizard
-
@@ -74,56 +56,6 @@
from tools import test_reports
test_reports.try_report_action(cr, uid, 'action_report_pos_details',wiz_data=data_dict, context=ctx, our_module='point_of_sale')
--
- I create a cash journal.
--
- !record {model: account.journal, id: account_journal_cash0}:
- name: 'Cash Journal'
- code: 'CSJ'
- type: 'cash'
- view_id: account.account_journal_bank_view
- sequence_id: account.sequence_journal
--
- I create a record for Bank Statement.
--
- !record {model: account.bank.statement, id: account_bank_statement_st0}:
- name: St.05/19
- balance_end_real: 0.0
- date: !eval time.strftime('%Y-%m-%d')
- journal_id: account_journal_cash0
- line_ids:
- - name: statement
- date: !eval "(datetime.now() + timedelta(5*31)).strftime('%Y-%m-%d')"
- type: customer
- account_id: account_pos_account_sales
- amount: 100
- partner_id: base.res_partner_agrolait
- period_id: account.period_5
- state: 'draft'
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a Account Statement Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.account.statement').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-account_statement_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a POS User Product Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.pos.user.product').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-user_product_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point Of Sale, we will print a POS All Close Cashbox Of the Day Report
--
- !python {model: account.bank.statement}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.all.closed.cashbox.of.the.day').create(cr, uid, [ref('point_of_sale.account_bank_statement_st0')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-all_closed_cash_box_of_the_day_report'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a Point of Sale, we will print a POS Sales User Report
-
@@ -133,15 +65,6 @@
(data, format) = netsvc.LocalService('report.pos.sales.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_user_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Sales User Today Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os, time
- data_dict = {'model':'ir.ui.menu', 'form':{'user_id':[ref('base.user_root')] }}
- (data, format) = netsvc.LocalService('report.pos.sales.user.today').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_user_today_report'+format), 'wb+').write(data)
-
In order to test the PDF reports defined on a Point of Sale, we will print a POS Payment Report
-
@@ -159,11 +82,3 @@
(data, format) = netsvc.LocalService('report.pos.payment.report.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], data_dict, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-payment_user_report'+format), 'wb+').write(data)
--
- In order to test the PDF reports defined on a Point of Sale, we will print a POS Today's Sales of Current User Report
--
- !python {model: pos.order}: |
- import netsvc, tools, os, time
- (data, format) = netsvc.LocalService('report.pos.sales.user.today.current.user').create(cr, uid, [ref('point_of_sale.order_pos1'), ref('point_of_sale.order_pos2')], {}, {})
- if tools.config['test_report_directory']:
- file(os.path.join(tools.config['test_report_directory'], 'point_of_sale-sales_today_current_user_report'+format), 'wb+').write(data)
diff --git a/addons/point_of_sale/test/point_of_sale_test.yml b/addons/point_of_sale/test/point_of_sale_test.yml
deleted file mode 100644
index 6165e993240..00000000000
--- a/addons/point_of_sale/test/point_of_sale_test.yml
+++ /dev/null
@@ -1,437 +0,0 @@
--
- In order to test the POS in module, To give business owners a convenient way of checking out customers and of recording sales.
-
--
- I configure all details for the Customer, Salesman and Product, Account.
--
- I create View Account Type.
--
- !record {model: account.account.type, id: account_account_type_view0}:
- close_method: none
- code: View
- name: View
- sign: 1
--
- I create Income Account Type.
--
- !record {model: account.account.type, id: account_account_type_income0}:
- close_method: unreconciled
- code: Income
- name: Income
- sign: 1
--
- I create Expense Account Type.
--
- !record {model: account.account.type, id: account_account_type_expense0}:
- close_method: unreconciled
- code: Expense
- name: Expense
- sign: 1
--
- I create Cash Account Type.
--
- !record {model: account.account.type, id: account_account_type_cash0}:
- close_method: balance
- code: Cash
- name: Cash
- sign: 1
--
- I create Minimal Chart Account.
--
- !record {model: account.account, id: account_pos_account_minimalchart}:
- code: 'x_0'
- company_id: base.main_company
- currency_mode: current
- name: Minimal Chart
- parent_left: 1
- parent_right: 12
- type: view
- user_type: account_account_type_view0
--
- I create Payable Account.
--
- !record {model: account.account, id: account_pos_account_payable}:
- code: AP
- company_id: base.main_company
- currency_mode: current
- name: Payable
- parent_id: account_pos_account_minimalchart
- parent_left: 2
- parent_right: 3
- reconcile: true
- type: payable
- user_type: account_account_type_expense0
--
- I create Receivable Account.
--
- !record {model: account.account, id: account_pos_account_receivable}:
- code: AR
- company_id: base.main_company
- currency_mode: current
- name: Receivable
- parent_id: account_pos_account_minimalchart
- parent_left: 4
- parent_right: 5
- reconcile: true
- type: receivable
- user_type: account_account_type_income0
--
- I create Cash Account.
--
- !record {model: account.account, id: account_pos_account_cash}:
- code: C
- company_id: base.main_company
- currency_mode: current
- name: Cash
- parent_id: account_pos_account_minimalchart
- parent_left: 6
- parent_right: 7
- type: other
- user_type: account_account_type_cash0
--
- I create Purchases Account.
--
- !record {model: account.account, id: account_pos_account_purchases}:
- code: P
- company_id: base.main_company
- currency_mode: current
- name: Purchases
- parent_id: account_pos_account_minimalchart
- parent_left: 8
- parent_right: 9
- type: other
- user_type: account_account_type_expense0
--
- I create Sales Account.
--
- !record {model: account.account, id: account_pos_account_sales}:
- code: Sale
- company_id: base.main_company
- currency_mode: current
- name: Sales
- parent_id: account_pos_account_minimalchart
- parent_left: 10
- parent_right: 11
- type: other
- user_type: account_account_type_income0
--
- I create Purchase Journal - (test).
--
- !record {model: account.journal, id: account_pos_account_journal_purchasejournal}:
- code: PUJ
- company_id: base.main_company
- default_credit_account_id: account_pos_account_purchases
- default_debit_account_id: account_pos_account_purchases
- name: Purchase Journal - (test)
- sequence_id: account.sequence_purchase_journal
- type: purchase
- view_id: account.account_journal_view
--
- I create Sale Journal.
--
- !record {model: account.journal, id: account_pos_account_journal_salejournal}:
- code: SJ
- company_id: base.main_company
- default_credit_account_id: account_pos_account_sales
- default_debit_account_id: account_pos_account_sales
- name: Sale Journal
- sequence_id: account.sequence_sale_journal
- type: sale
- view_id: account.account_journal_view
--
- I create Bank Journal.
--
- !record {model: account.journal, id: account_pos_account_journal_bankjournal}:
- code: BNK
- company_id: base.main_company
- default_credit_account_id: account_pos_account_cash
- default_debit_account_id: account_pos_account_cash
- name: Bank Journal
- sequence_id: account.sequence_journal
- type: cash
- view_id: account.account_journal_bank_view
--
- I create property for account payable.
--
- !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
- company_id: base.main_company
- fields_id: account.field_res_partner_property_account_payable
- name: property_account_expense_categ
- value_reference: account.account,5
--
- I create property for account receivable.
--
- !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
- company_id: base.main_company
- fields_id: account.field_res_partner_property_account_receivable
- name: property_account_income_categ
- value_reference: account.account,6
--
- I create Partner category Customers.
--
- !record {model: res.partner.category, id: res_partner_category_customers0}:
- name: Customers
--
- I create partner
--
- !record {model: res.partner, id: res_partner_cleartrail0}:
- category_id:
- - res_partner_category_customers0
- name: Cleartrail
--
- I create partner address.
--
- !record {model: res.partner.address, id: res_partner_address_1}:
- partner_id: res_partner_cleartrail0
- street: onam plaza, 14 B palasia A B Road
- type: contact
--
- I create partner invoice address.
--
- !record {model: res.partner.address, id: res_partner_address_2}:
- partner_id: res_partner_cleartrail0
- type: invoice
--
- I create partner delivery address.
--
- !record {model: res.partner.address, id: res_partner_address_3}:
- partner_id: res_partner_cleartrail0
- street: sangam house 15 B palasia, A B Road
- type: delivery
--
- I create product category.
--
- !record {model: product.category, id: product_category_allproductssellable0}:
- name: Mobile Products Sellable
--
- I create partner.
--
- !record {model: res.partner, id: res_partner_microlinktechnologies0}:
- address:
- - street: Kailash Vaibhav, Parksite
- name: Micro Link Technologies
- property_account_payable: account_pos_account_payable
- property_account_receivable: account_pos_account_receivable
- supplier: true
--
- I create partner address .
--
- !record {model: res.partner.address, id: res_partner_address_0}:
- country_id: base.in
- partner_id: res_partner_microlinktechnologies0
- street: Ash House, Ash Road
- title: base.res_partner_title_miss
--
- I create product category .
--
- !record {model: product.category, id: product_category_services0}:
- name: Mobile Services
--
- I create product Samsung Mobile.
--
- !record {model: product.product, id: product_product_samsungmobile0}:
- categ_id: product_category_allproductssellable0
- cost_method: standard
- list_price: 170.0
- mes_type: fixed
- name: Samsung Mobile
- procure_method: make_to_order
- property_account_expense: account_pos_account_payable
- property_account_income: account_pos_account_receivable
- seller_delay: '1'
- standard_price: 160.0
- supply_method: produce
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
--
- I create product category .
--
- !record {model: product.category, id: product_category_computer0}:
- name: Computer
--
- I create product HP Pavilion Desktop PCs
--
- !record {model: product.product, id: product_product_hppaviliondesktoppcs0}:
- categ_id: product_category_computer0
- cost_method: standard
- mes_type: fixed
- list_price: 1000.0
- name: HP Pavilion Desktop PCs
- procure_method: make_to_stock
- seller_ids:
- - delay: 1
- name: res_partner_microlinktechnologies0
- min_qty: 5.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
- property_account_expense: account_pos_account_payable
- property_account_income: account_pos_account_receivable
--
- I create New Order by adding the details of Salesman and "Product" as Samsung Mobile Quantity as 10.
--
- !record {model: pos.order, id: pos_order_pos0}:
- company_id: base.main_company
- date_order: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- date_validity: !eval "(datetime.now() + timedelta(6*1)).strftime('%Y-%m-%d')"
- lines:
- - company_id: base.main_company
- name: Order Line/01
- notice: No Discount
- product_id: product_product_samsungmobile0
- qty: 10.0
- qty_rfd: 0.0
- partner_id: base.res_partner_agrolait
- name: POS/001
- price_type: tax_excluded
- pricelist_id: product.list0
- sale_journal: account.sales_journal
- shop_id: sale.shop
- user_salesman_id: base.user_root
--
- I add discount.
--
- !record {model: pos.discount, id: pos_discount_0}:
- discount: 5.0
- discount_notes: More then 5 product
--
- I Apply the discount.
--
- !python {model: pos.discount}: |
- self.apply_discount(cr, uid, [ref("pos_discount_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id":
- ref("pos_order_pos0"), })
--
- I open the register.
--
- !record {model: pos.open.statement, id: pos_open_statement_0}:
- {}
--
- I open the statement.
--
- !python {model: pos.open.statement}: |
- jou_obj = self.pool.get('account.journal')
- statement_obj = self.pool.get('account.bank.statement')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %s ORDER BY journal_id"% (uid, ))
- jou_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = jou_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', jou_ids)], context=context)
- ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context)
- if not ids:
- self.open_statement(cr, uid, [ref("pos_open_statement_0")], {"lang": "en_US", "active_model":
- "ir.ui.menu", "active_ids": [ref("point_of_sale.menu_open_statement")], "tz":
- False, "active_id": ref("point_of_sale.menu_open_statement"), })
--
- I click on the "Make Payment" wizard.
--
- !record {model: pos.make.payment, id: pos_make_payment_0}:
- amount: 1615.0
- journal: 7
- payment_date: !eval time.strftime("%Y-%m-%d")
- payment_name: Payment
- product_id: product_product_hppaviliondesktoppcs0
- pricelist_id: product.list0
- partner_id: base.res_partner_agrolait
--
- I make the payment.
--
- !python {model: pos.make.payment}: |
- self.check(cr, uid, [ref("pos_make_payment_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("point_of_sale.pos_order_pos0")], "tz":
- False, "active_id": ref("point_of_sale.pos_order_pos0"), })
--
- I check the Statement lines are created automatically when payment is done.
--
- !python {model: pos.order}: |
- order=self.browse(cr,uid,ref("pos_order_pos0"))
- assert(order.statement_ids!=[]), "Statement lines not created"
--
- When I click on Return picking button , I get three option.
--
- 1. Cancel 2.Return Goods and Exchange 3.Return without Refund
--
- When I click on Return Goods and Exchange.
--
- Then it allows me to define the quantity of products, which will return to the stock.
--
- I click on Return Picking button.
--
- !record {model: pos.return, id: pos_return_0}:
- pos_moves_ids:
- - product_id: product_product_hppaviliondesktoppcs0
- quantity: 5.0
--
- I Return the product.
--
- !python {model: pos.return}: |
- self.create_returns(cr, uid, [ref("pos_return_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("point_of_sale.pos_order_pos0")], "tz":
- False, "active_id": ref("point_of_sale.pos_order_pos0"), })
--
- Then it allows me to define the quantity of products, which will return to the stock.
--
- I select the HP Pavilion Desktop PCs for exchange.
--
- !record {model: pos.add.product, id: pos_add_product_0}:
- product_id: product_product_hppaviliondesktoppcs0
- quantity: 5.0
--
- I click on close button.
--
- !python {model: pos.add.product}: |
- return_obj = self.pool.get('pos.return')
- context['active_ids'] = [ref("pos_order_pos0")]
- return_obj.view_init(cr, uid, [],context=context)
- self.close_action(cr, uid, [ref("pos_add_product_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id": ref("pos_order_pos0"),
- })
--
- I create payment.
--
- !record {model: pos.make.payment, id: pos_make_payment_1}:
- amount: 680.0
- journal: 7
- payment_date: !eval time.strftime("%Y-%m-%d")
- payment_name: Payment
- product_id: product_product_hppaviliondesktoppcs0
- pricelist_id: product.list0
- partner_id: base.res_partner_agrolait
--
- For payment, I click on Make Payment.
--
- !python {model: pos.make.payment}: |
- self.check(cr, uid, [ref("pos_make_payment_1")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz":
- False, "active_id": ref("pos_order_pos0"), })
--
- To check the Return without Refund . I click button "Return without Refund ".
--
- !record {model: pos.return, id: pos_return_0}:
- {}
--
- The quantity which is selected in Return lines wizard is refunded.
--
- !python {model: pos.return}: |
- self.create_returns2(cr, uid, [ref("pos_return_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz":
- False, "active_id": ref("pos_order_pos0"), })
--
- To Close order, I use the wizard "Sale Confirm".
--
- !record {model: pos.confirm, id: pos_confirm_0}:
- {}
--
- I close this order.
--
- !python {model: pos.confirm}: |
- self.action_confirm(cr, uid, [ref("pos_confirm_0")], {"lang": "en_US", "active_model":
- "pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id": ref("pos_order_pos0"),
- })
--
- I check order state is done.
--
- !python {model: pos.order}: |
- order=self.browse(cr,uid,ref("pos_order_pos0"))
- assert(order.state=='done'), "Order is not done"
diff --git a/addons/point_of_sale/wizard/__init__.py b/addons/point_of_sale/wizard/__init__.py
index 4a131d5894b..0985ae906be 100644
--- a/addons/point_of_sale/wizard/__init__.py
+++ b/addons/point_of_sale/wizard/__init__.py
@@ -19,10 +19,8 @@
#
##############################################################################
-import pos_add_product
import pos_confirm
import pos_discount
-import pos_get_sale
import pos_open_statement
import pos_close_statement
import pos_box_entries
@@ -30,15 +28,11 @@ import pos_box_out
import pos_details
import pos_sales_user
import pos_sales_user_today
-import pos_sales_user_current_user
-import all_closed_cashbox_of_the_day
import pos_receipt
import pos_payment_report_user
import pos_payment_report_date
import pos_payment_report
import pos_payment
-import pos_scan_product
-import pos_return
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.py b/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.py
deleted file mode 100644
index 330668548e4..00000000000
--- a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv
-
-class all_closed_cashbox_of_the_day(osv.osv_memory):
- _name = 'all.closed.cashbox.of.the.day'
- _description = 'All closed cashbox of the day'
-
- def print_report(self, cr, uid, ids, context=None):
- """
- To get the date and print the report
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : retrun report
- """
- if context is None:
- context = {}
- datas = {'ids': context.get('active_ids', [])}
- return {
- 'type': 'ir.actions.report.xml',
- 'report_name': 'all.closed.cashbox.of.the.day',
- 'datas': datas,
- }
-
-all_closed_cashbox_of_the_day()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml b/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml
deleted file mode 100644
index e78ef5c6d6a..00000000000
--- a/addons/point_of_sale/wizard/all_closed_cashbox_of_the_day.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
-
- all closed cashbox of the day
- all.closed.cashbox.of.the.day
- form
-
-
-
-
-
-
-
-
-
-
-
- All Cashboxes Of the day
- all.closed.cashbox.of.the.day
- form
- form
- new
-
-
-
-
diff --git a/addons/point_of_sale/wizard/pos_add_product.py b/addons/point_of_sale/wizard/pos_add_product.py
deleted file mode 100644
index dfbb96a4514..00000000000
--- a/addons/point_of_sale/wizard/pos_add_product.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv, fields
-from tools.translate import _
-
-
-class add_product(osv.osv_memory):
- _name = 'pos.add.product'
- _description = 'Add Product'
-
- _columns = {
- 'product_id': fields.many2one('product.product', 'Product', required=True),
- 'quantity': fields.float('Quantity', required=True),
- }
- _defaults = {
- 'quantity': 1,
- }
-
- def select_product(self, cr, uid, ids, context=None):
- """
- To get the product and quantity and add in order .
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : Return the add product form again for adding more product
- """
- if context is None:
- context = {}
- this = self.browse(cr, uid, ids[0], context=context)
- record_id = context and context.get('active_id', False)
- assert record_id, _('Active ID is not found')
- if record_id:
- order_obj = self.pool.get('pos.order')
- order_obj.add_product(cr, uid, record_id, this.product_id.id, this.quantity, context=context)
- return {
- 'name': _('Add Product'),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'pos.add.product',
- 'view_id': False,
- 'target': 'new',
- 'views': False,
- 'type': 'ir.actions.act_window',
- }
-
- def close_action(self, cr, uid, ids, context=None):
- """
- To get the product and Make the payment .
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : Return the Make Payment
- """
- if context is None:
- context = {}
- record_id = context and context.get('active_id', False)
- order_obj= self.pool.get('pos.order')
- this = self.browse(cr, uid, ids[0], context)
- order_obj.add_product(cr, uid, record_id, this.product_id.id, this.quantity, context=context)
-
- order_obj.write(cr, uid, [record_id], {'state': 'done'}, context=context)
- return {
- 'name': _('Make Payment'),
- 'context': context and context.get('active_id', False),
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'pos.make.payment',
- 'view_id': False,
- 'target': 'new',
- 'views': False,
- 'type': 'ir.actions.act_window',
- }
-
-add_product()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_add_product.xml b/addons/point_of_sale/wizard/pos_add_product.xml
deleted file mode 100644
index ac5fd1c6f65..00000000000
--- a/addons/point_of_sale/wizard/pos_add_product.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
- Add Product
- pos.add.product
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Add Product
- ir.actions.act_window
- pos.add.product
- form
- form
- new
-
-
-
-
diff --git a/addons/point_of_sale/wizard/pos_box_entries.py b/addons/point_of_sale/wizard/pos_box_entries.py
index dcc9779a903..0b417d8b1cf 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.py
+++ b/addons/point_of_sale/wizard/pos_box_entries.py
@@ -37,14 +37,13 @@ def get_journal(self, cr, uid, context=None):
journal_obj = self.pool.get('account.journal')
statement_obj = self.pool.get('account.bank.statement')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users WHERE user_id = %s ORDER BY journal_id", (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- ids = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- obj_ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)], context=context)
- res_obj = journal_obj.read(cr, uid, ids, ['journal_id'], context=context)
- res_obj = [(r1['id']) for r1 in res_obj]
+
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+ obj_ids = statement_obj.search(cr, uid, [('state', '=', 'open'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context)
res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context)
res = [(r['journal_id']) for r in res]
+ if not len(res):
+ raise osv.except_osv(_('Error !'), _('You do not have any open cash register. You must create a payment method or open a cash register.'))
res.insert(0, ('', ''))
return res
@@ -69,12 +68,11 @@ class pos_box_entries(osv.osv_memory):
return res
-
_columns = {
- 'name': fields.char('Description', size=32, required=True),
+ 'name': fields.char('Reason', size=32, required=True),
'journal_id': fields.selection(get_journal, "Cash Register", required=True),
'product_id': fields.selection(_get_income_product, "Operation", required=True),
- 'amount': fields.float('Amount', digits=(16, 2)),
+ 'amount': fields.float('Amount', digits=(16, 2), required=True),
'ref': fields.char('Ref', size=32),
}
_defaults = {
@@ -122,9 +120,6 @@ class pos_box_entries(osv.osv_memory):
vals['amount'] = data['amount'] or 0.0
vals['ref'] = "%s" % (data['ref'] or '')
vals['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id'], context=context).name, data['name'].decode('utf8'))
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
- if address_u:
- vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
bank_statement.create(cr, uid, vals, context=context)
return {}
diff --git a/addons/point_of_sale/wizard/pos_box_entries.xml b/addons/point_of_sale/wizard/pos_box_entries.xml
index e0af60a1f73..2db10e36aa8 100644
--- a/addons/point_of_sale/wizard/pos_box_entries.xml
+++ b/addons/point_of_sale/wizard/pos_box_entries.xml
@@ -3,31 +3,31 @@
-
+ Box Entriespos.box.entriesform
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
- Box Entries
+ Put Money Inir.actions.act_windowpos.box.entriesform
@@ -35,5 +35,5 @@
new
-
+
diff --git a/addons/point_of_sale/wizard/pos_box_out.py b/addons/point_of_sale/wizard/pos_box_out.py
index 74f1a968bc7..b4298745c35 100644
--- a/addons/point_of_sale/wizard/pos_box_out.py
+++ b/addons/point_of_sale/wizard/pos_box_out.py
@@ -49,11 +49,10 @@ class pos_box_out(osv.osv_memory):
return res
_columns = {
- 'name': fields.char('Description', size=32, required=True),
+ 'name': fields.char('Description / Reason', size=32, required=True),
'journal_id': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
'product_id': fields.selection(_get_expense_product, "Operation", required=True),
- 'amount': fields.float('Amount', digits=(16, 2)),
- 'ref': fields.char('Ref', size=32),
+ 'amount': fields.float('Amount', digits=(16, 2), required=True),
}
_defaults = {
'journal_id': 1,
@@ -81,18 +80,8 @@ class pos_box_out(osv.osv_memory):
sunday = (datetime.today() + relativedelta(weekday=6)).strftime('%Y-%m-%d')
done_statmt = statement_obj.search(cr, uid, [('date', '>=', monday+' 00:00:00'), ('date', '<=', sunday+' 23:59:59'), ('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid)], context=context)
stat_done = statement_obj.browse(cr, uid, done_statmt, context=context)
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
am = 0.0
product = product_obj.browse(cr, uid, data['product_id'], context=context)
- amount_check = product.am_out or False
- for st in stat_done:
- for s in st.line_ids:
- if address_u and s.partner_id == address_u.partner_id and s.am_out:
- am += s.amount
- if (-data['amount'] or 0.0) + am < -(res_obj.browse(cr, uid, uid, context=context).company_id.max_diff or 0.0) and amount_check:
- val = (res_obj.browse(cr, uid, uid).company_id.max_diff or 0.0) + am
- raise osv.except_osv(_('Error !'), _('The maximum value you can still withdraw is exceeded. \n Remaining value is equal to %d ')%(val))
-
acc_id = product.property_account_income
if not acc_id:
raise osv.except_osv(_('Error !'), _('please check that account is set to %s')%(product.name))
@@ -115,13 +104,7 @@ class pos_box_out(osv.osv_memory):
if data['amount'] > 0:
amount = -data['amount']
vals['amount'] = amount
- if product.am_out:
- vals['am_out'] = True
- vals['ref'] = data['ref'] or ''
vals['name'] = "%s: %s " % (product.name, data['name'])
- address_u = res_obj.browse(cr, uid, uid, context=context).address_id
- if address_u:
- vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
statement_line_obj.create(cr, uid, vals, context=context)
return {}
diff --git a/addons/point_of_sale/wizard/pos_box_out.xml b/addons/point_of_sale/wizard/pos_box_out.xml
index 4647b1e66a7..4f19a407a38 100644
--- a/addons/point_of_sale/wizard/pos_box_out.xml
+++ b/addons/point_of_sale/wizard/pos_box_out.xml
@@ -3,31 +3,31 @@
-
+ Box Outpos.box.outform
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- Box Out
+ Take Money Outir.actions.act_windowpos.box.outform
@@ -35,5 +35,5 @@
new
-
+
diff --git a/addons/point_of_sale/wizard/pos_close_statement.py b/addons/point_of_sale/wizard/pos_close_statement.py
index 222338f6e10..92dee2f8e4c 100644
--- a/addons/point_of_sale/wizard/pos_close_statement.py
+++ b/addons/point_of_sale/wizard/pos_close_statement.py
@@ -38,27 +38,27 @@ class pos_close_statement(osv.osv_memory):
mod_obj = self.pool.get('ir.model.data')
statement_obj = self.pool.get('account.bank.statement')
journal_obj = self.pool.get('account.journal')
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id=%s ORDER BY journal_id", (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context)
- for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
- if not ids:
- raise osv.except_osv(_('Message'), _('Cash registers are already closed.'))
- else:
- if not journal.check_dtls:
- statement_obj.button_confirm_cash(cr, uid, ids, context=context)
- tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree')
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+ ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', j_ids)], context=context)
+ if not ids:
+ raise osv.except_osv(_('Message'), _('Cash registers are already closed.'))
+ for statement in statement_obj.browse(cr, uid, ids, context=context):
+ statement_obj.write(cr, uid, [statement.id], {
+ 'balance_end_real': statement.balance_end
+ }, context=context)
+ if not statement.journal_id.check_dtls:
+ statement_obj.button_confirm_cash(cr, uid, [statement.id], context=context)
+
+ tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')
tree_id = tree_res and tree_res[1] or False
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2')
form_id = form_res and form_res[1] or False
search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_confirm_cash_statement_filter')
-
+
return {
'domain': "[('id', 'in', " + str(ids) + ")]",
- 'name': 'Close Statements',
+ 'name': _('Close Cash Registers'),
'view_type': 'form',
'view_mode': 'tree, form',
'search_view_id': search_id and search_id[1] or False,
@@ -66,7 +66,6 @@ class pos_close_statement(osv.osv_memory):
'views': [(tree_id, 'tree'), (form_id, 'form')],
'type': 'ir.actions.act_window'
}
-
pos_close_statement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_close_statement.xml b/addons/point_of_sale/wizard/pos_close_statement.xml
index 7a9a5a0e23d..61c984c873e 100644
--- a/addons/point_of_sale/wizard/pos_close_statement.xml
+++ b/addons/point_of_sale/wizard/pos_close_statement.xml
@@ -1,15 +1,16 @@
-
+
-
-
+
+ Close Statementspos.close.statementform
-
-
+
+
+
@@ -22,15 +23,14 @@
-
-
-
+
+
Close Cash Registerir.actions.act_window
@@ -38,6 +38,6 @@
formformnew
-
-
-
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_confirm.py b/addons/point_of_sale/wizard/pos_confirm.py
index c55209650ca..c80f3ed1dd6 100644
--- a/addons/point_of_sale/wizard/pos_confirm.py
+++ b/addons/point_of_sale/wizard/pos_confirm.py
@@ -25,36 +25,21 @@ from osv import osv
class pos_confirm(osv.osv_memory):
_name = 'pos.confirm'
- _description = 'Point of Sale Confirm'
+ _description = 'Post POS Journal Entries'
def action_confirm(self, cr, uid, ids, context=None):
- """
- Confirm the order and close the sales.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return :Blank dictionary
- """
- if context is None:
- context = {}
- record_id = context and context.get('active_id', False)
- if record_id:
- if isinstance(record_id, (int, long)):
- record_id = [record_id]
- if record_id:
- order_obj = self.pool.get('pos.order')
-
- for order_id in order_obj.browse(cr, uid, record_id, context=context):
- if order_id.state == 'paid':
- order_obj.write(cr, uid, [order_id.id], {'journal_entry': True}, context=context)
- order_obj.create_account_move(cr, uid, [order_id.id], context=context)
-
- wf_service = netsvc.LocalService("workflow")
- for i in record_id:
- wf_service.trg_validate(uid, 'pos.order', i, 'done', cr)
+ wf_service = netsvc.LocalService("workflow")
+ order_obj = self.pool.get('pos.order')
+ ids = order_obj.search(cr, uid, [('state','=','paid')], context=context)
+ for order in order_obj.browse(cr, uid, ids, context=context):
+ todo = True
+ for line in order.statement_ids:
+ if line.statement_id.state <> 'confirm':
+ todo = False
+ break
+ if todo:
+ wf_service.trg_validate(uid, 'pos.order', order.id, 'done', cr)
return {}
-
pos_confirm()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_confirm.xml b/addons/point_of_sale/wizard/pos_confirm.xml
index 1ea769cae49..85b43bd115d 100644
--- a/addons/point_of_sale/wizard/pos_confirm.xml
+++ b/addons/point_of_sale/wizard/pos_confirm.xml
@@ -1,32 +1,37 @@
-
+
-
-
- Sale Confirm
+
+ Post Journal Entriespos.confirmform
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
- Sale Confirm
+ Post Journal Entriesir.actions.act_windowpos.confirmformformnew
-
-
-
\ No newline at end of file
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_discount.py b/addons/point_of_sale/wizard/pos_discount.py
index 928fe396f0b..aadd85b48eb 100644
--- a/addons/point_of_sale/wizard/pos_discount.py
+++ b/addons/point_of_sale/wizard/pos_discount.py
@@ -23,34 +23,28 @@ from osv import osv, fields
class pos_discount(osv.osv_memory):
_name = 'pos.discount'
- _description = 'Add Discount'
-
+ _description = 'Add a Global Discount'
_columns = {
- 'discount': fields.float('Discount ', required=True),
- 'discount_notes': fields.char('Discount Notes', size= 128, required=True),
+ 'discount': fields.float('Discount (%)', required=True, digits=(16,2)),
}
_defaults = {
'discount': 5,
}
-
- def view_init(self, cr, uid, fields_list, context=None):
- """
- Creates view dynamically and adding fields at runtime.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return: New arch of view with new columns.
- """
- if context is None:
- context = {}
- super(pos_discount, self).view_init(cr, uid, fields_list, context=context)
- record_id = context and context.get('active_id', False) or False
- order = self.pool.get('pos.order').browse(cr, uid, record_id, context=context)
- if not order.lines:
- raise osv.except_osv(_('Error!'), _('No Order Lines'))
- True
+# def view_init(self, cr, uid, fields_list, context=None):
+# """
+# Creates view dynamically and adding fields at runtime.
+# @param self: The object pointer.
+# @param cr: A database cursor
+# @param uid: ID of the user currently logged in
+# @param context: A standard dictionary
+# @return: New arch of view with new columns.
+# """
+# if context is None:
+# context = {}
+# super(pos_discount, self).view_init(cr, uid, fields_list, context=context)
+# record_id = context and context.get('active_id', False) or False
+# True
def apply_discount(self, cr, uid, ids, context=None):
"""
@@ -70,33 +64,8 @@ class pos_discount(osv.osv_memory):
record_id = context and context.get('active_id', False)
if isinstance(record_id, (int, long)):
record_id = [record_id]
-
for order in order_ref.browse(cr, uid, record_id, context=context):
- for line in order.lines:
- company_discount = order.company_id.company_discount
- applied_discount = this.discount
-
- if applied_discount == 0.00:
- notice = 'No Discount'
- elif company_discount >= applied_discount:
- notice = 'Minimum Discount'
- else:
- notice = this.discount_notes
- res_new = {}
- if this.discount <= company_discount:
- res_new = {
- 'discount': this.discount,
- 'notice': notice,
- 'price_ded': line.price_unit * line.qty * (this.discount or 0) * 0.01 or 0.0
- }
- else:
- res_new = {
- 'discount': this.discount,
- 'notice': notice,
- 'price_ded': line.price_unit * line.qty * (this.discount or 0) * 0.01 or 0.0
- }
-
- order_line_ref.write(cr, uid, [line.id], res_new, context=context)
+ order_line_ref.write(cr, uid, [x.id for x in order.lines], {'discount':this.discount}, context=context)
return {}
pos_discount()
diff --git a/addons/point_of_sale/wizard/pos_discount.xml b/addons/point_of_sale/wizard/pos_discount.xml
index a0a7c534a95..bb198e29acf 100644
--- a/addons/point_of_sale/wizard/pos_discount.xml
+++ b/addons/point_of_sale/wizard/pos_discount.xml
@@ -1,22 +1,21 @@
-
+
-
-
+
+ Apply Discountpos.discountform
-
-
-
-
-
-
+
+
+
+
+
@@ -29,6 +28,6 @@
formnew
-
-
-
\ No newline at end of file
+
+
+
diff --git a/addons/point_of_sale/wizard/pos_get_sale.py b/addons/point_of_sale/wizard/pos_get_sale.py
deleted file mode 100644
index 48bd89bce7f..00000000000
--- a/addons/point_of_sale/wizard/pos_get_sale.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv, fields
-from tools.translate import _
-
-
-class pos_get_sale(osv.osv_memory):
- _name = 'pos.get.sale'
- _description = 'Get From Sale'
-
- _columns = {
- 'picking_id': fields.many2one('stock.picking', 'Sale Order', domain=[('state', 'in', ('assigned', 'confirmed')), ('type', '=', 'out')], context="{'contact_display': 'partner'}", required=True),
- }
-
- def sale_complete(self, cr, uid, ids, context=None):
- """
- Select the picking order and add the in Point of sale order
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : nothing
- """
- proxy_pos = self.pool.get('pos.order')
- proxy_pick = self.pool.get('stock.picking')
- proxy_order_line = self.pool.get('pos.order.line')
- if context is None:
- context = {}
- this = self.browse(cr, uid, ids[0], context=context)
- record_id = context and context.get('active_id', False)
-
- if record_id:
- order = proxy_pos.browse(cr, uid, record_id, context=context)
- if order.state in ('paid', 'invoiced'):
- raise osv.except_osv(_('UserError '), _("You can't modify this order. It has already been paid"))
-
- for pick in proxy_pick.browse(cr, uid, [this.picking_id.id], context=context):
- proxy_pos.write(cr, uid, record_id, {
- 'picking_id': this.picking_id.id,
- 'partner_id': pick.address_id and pick.address_id.partner_id.id
- }, context=context)
-
- order = proxy_pick.write(cr, uid, [this.picking_id.id], {
- 'invoice_state': 'none',
- 'pos_order': record_id
- }, context=context)
-
- for line in pick.move_lines:
- proxy_order_line.create(cr, uid, {
- 'name': line.sale_line_id.name,
- 'order_id': record_id,
- 'qty': line.product_qty,
- 'product_id': line.product_id.id,
- 'price_unit': line.sale_line_id.price_unit,
- 'discount': line.sale_line_id.discount,
- }, context=context)
- return {}
-
-pos_get_sale()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_get_sale.xml b/addons/point_of_sale/wizard/pos_get_sale.xml
deleted file mode 100644
index 9a28da548d2..00000000000
--- a/addons/point_of_sale/wizard/pos_get_sale.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
- Open Sale Order
- pos.get.sale
- form
-
-
-
-
-
-
-
-
-
-
-
-
- Select an Open Sale Order
- ir.actions.act_window
- pos.get.sale
- form
- form
- new
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_open_statement.py b/addons/point_of_sale/wizard/pos_open_statement.py
index 241f0a6e1d0..038ca3b6990 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.py
+++ b/addons/point_of_sale/wizard/pos_open_statement.py
@@ -42,46 +42,48 @@ class pos_open_statement(osv.osv_memory):
journal_obj = self.pool.get('account.journal')
if context is None:
context = {}
- company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %s ORDER BY journal_id"% (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
+ st_ids = []
+ j_ids = journal_obj.search(cr, uid, [('journal_user','=',1)], context=context)
+
+ for journal in journal_obj.browse(cr, uid, j_ids, context=context):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)], context=context)
if len(ids):
- raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s".\nPlease close its related cash register.') %(journal.name))
+ st_ids += ids
+ continue
- number = ''
if journal.sequence_id:
number = sequence_obj.get_id(cr, uid, journal.sequence_id.id)
else:
number = sequence_obj.get(cr, uid, 'account.cash.statement')
- data.update({'journal_id': journal.id,
- 'company_id': company_id,
- 'user_id': uid,
- 'state': 'draft',
- 'name': number })
+ data.update({
+ 'journal_id': journal.id,
+ 'user_id': uid,
+ 'state': 'draft',
+ 'name': number
+ })
statement_id = statement_obj.create(cr, uid, data, context=context)
- statement_obj.button_open(cr, uid, [statement_id], context)
+ st_ids.append(statement_id)
- tree_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_tree')
+ if journal.auto_cash:
+ statement_obj.button_open(cr, uid, [statement_id], context)
+
+ tree_res = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_cash_statement_pos_tree')
tree_id = tree_res and tree_res[1] or False
form_res = mod_obj.get_object_reference(cr, uid, 'account', 'view_bank_statement_form2')
form_id = form_res and form_res[1] or False
search_id = mod_obj.get_object_reference(cr, uid, 'point_of_sale', 'view_pos_open_cash_statement_filter')
return {
- 'domain': "[('state', '=', 'open'),('user_id', '=', "+ str(uid) +")]",
- 'name': 'Open Statement',
+ 'domain': "[('id', 'in',[ "+','.join(map(str,st_ids))+"])]",
+ 'name': _('Open Cash Registers'),
'view_type': 'form',
'view_mode': 'tree, form',
'search_view_id': search_id and search_id[1] or False ,
'res_model': 'account.bank.statement',
'views': [(tree_id, 'tree'), (form_id, 'form')],
- 'context': {'search_default_open': 1},
+ 'context': {},
'type': 'ir.actions.act_window'
}
pos_open_statement()
diff --git a/addons/point_of_sale/wizard/pos_open_statement.xml b/addons/point_of_sale/wizard/pos_open_statement.xml
index 870d8f71e47..54a66c3c5f7 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.xml
+++ b/addons/point_of_sale/wizard/pos_open_statement.xml
@@ -3,31 +3,31 @@
-
+ Open Statementspos.open.statementform
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+ Open Cash Register
@@ -38,5 +38,5 @@
new
-
-
+
+
diff --git a/addons/point_of_sale/wizard/pos_payment.py b/addons/point_of_sale/wizard/pos_payment.py
index ea5bd2639d7..1de3a23614a 100644
--- a/addons/point_of_sale/wizard/pos_payment.py
+++ b/addons/point_of_sale/wizard/pos_payment.py
@@ -29,188 +29,44 @@ import pos_box_entries
class pos_make_payment(osv.osv_memory):
_name = 'pos.make.payment'
_description = 'Point of Sale Payment'
-
- def default_get(self, cr, uid, fields, context=None):
- """
- To get default values for the object.
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param fields: List of fields for which we want default values
- @param context: A standard dictionary
- @return: A dictionary which of fields with values.
- """
- if context is None:
- context = {}
- journal_obj = self.pool.get('account.journal')
- order_obj = self.pool.get('pos.order')
- res = super(pos_make_payment, self).default_get(cr, uid, fields, context=context)
- active_id = context and context.get('active_id', False)
- if active_id:
- cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
- "WHERE user_id = %d ORDER BY journal_id"% (uid, ))
- j_ids = map(lambda x1: x1[0], cr.fetchall())
- journal = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
- journal = journal and journal[0] or False
- order = order_obj.browse(cr, uid, active_id, context=context)
- #get amount to pay
- amount = order.amount_total - order.amount_paid
- if amount <= 0.0:
- context.update({'flag': True})
- order_obj.action_paid(cr, uid, [active_id], context)
- elif order.amount_paid > 0.0:
- order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
- invoice_wanted_checked = False
-
- current_date = time.strftime('%Y-%m-%d')
-
- if 'journal' in fields:
- res.update({'journal': journal})
- if 'amount' in fields:
- res.update({'amount': amount})
- if 'invoice_wanted' in fields:
- res.update({'invoice_wanted': invoice_wanted_checked})
- if 'payment_date' in fields:
- res.update({'payment_date': current_date})
- if 'payment_name' in fields:
- res.update({'payment_name': 'Payment'})
- if 'partner_id' in fields:
- res.update({'partner_id': order.partner_id.id or False})
- if 'pricelist_id' in fields:
- res.update({'pricelist_id': order.pricelist_id.id or False})
- return res
-
- def view_init(self, cr, uid, fields_list, context=None):
- if context is None:
- context = {}
- super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
- active_id = context and context.get('active_id', False) or False
- if active_id:
- order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
- if not order.lines:
- raise osv.except_osv(_('Error!'),_('No order lines defined for this sale '))
- return True
-
- def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
- """
- Changes the view dynamically
-
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
-
- @return: New arch of view.
-
- """
- result = super(pos_make_payment, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
- if context is None:
- context = {}
- active_model = context.get('active_model')
- active_id = context and context.get('active_id', False) or False
- if not active_id or (active_model and active_model != 'pos.order'):
- return result
-
- order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
- if order.amount_total == order.amount_paid:
- result['arch'] = """
-
-
-
-
-
-
-
- """
- return result
-
- def onchange_product_id(self, cr, uid, ids, product_id, amount):
- """ Changes amount if product_id changes.
- @param product_id: Changed product_id
- @param amount: Amount to be paid
- @return: Dictionary of changed values
- """
- prod_obj = self.pool.get('product.product')
- if product_id:
- product = prod_obj.browse(cr, uid, product_id)
- amount = product.list_price
- return {'value': {'amount': amount}}
-
def check(self, cr, uid, ids, context=None):
"""Check the order:
if the order is not paid: continue payment,
- if the order is paid print invoice (if wanted) or ticket.
+ if the order is paid print ticket.
"""
+ context = context or {}
order_obj = self.pool.get('pos.order')
obj_partner = self.pool.get('res.partner')
- if context is None:
- context = {}
active_id = context and context.get('active_id', False)
+
order = order_obj.browse(cr, uid, active_id, context=context)
amount = order.amount_total - order.amount_paid
- data = self.read(cr, uid, ids, context=context)[0]
- for m2o_field in ['product_id','pricelist_id','partner_id']:
- data[m2o_field] = data.get(m2o_field, False) and data[m2o_field][0] or False
- if data['is_acc']:
- amount = self.pool.get('product.product').browse(cr, uid, data['product_id'], context=context).list_price
+ data = self.read(cr, uid, ids, context=context)[0]
+ # this is probably a problem of osv_memory as it's not compatible with normal OSV's
+ #data['journal'] = data['journal'][0]
if amount != 0.0:
- order_obj.write(cr, uid, [active_id], {'invoice_wanted': data['invoice_wanted'], 'partner_id': data['partner_id']}, context=context)
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
- if data['partner_id'] and data['invoice_wanted']:
- partner = obj_partner.browse(cr, uid, data['partner_id'], context=context)
- if not partner.address:
- raise osv.except_osv(_('Error!'),_("Customer doesn't have an address to make the invoice"))
- order_obj.action_invoice(cr, uid, [active_id], context=context)
- order_obj.create_picking(cr, uid, [active_id], context=context)
- if context.get('return', False):
- order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
- else:
- order_obj.write(cr, uid, [active_id],{'state':'paid'}, context=context)
- return self.create_invoice(cr, uid, ids, context=context)
- else:
- context.update({'flag': True})
- order_obj.action_paid(cr, uid, [active_id], context=context)
- if context.get('return', False):
- order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
- else:
- order_obj.write(cr, uid, [active_id], {'state':'paid'}, context=context)
- return self.print_report(cr, uid, ids, context=context)
+ order_obj.action_paid(cr, uid, [active_id], context=context)
+ return self.print_report(cr, uid, ids, context=context)
- context.update({'flag': True})
- # Todo need to check
- order_obj.action_paid(cr, uid, [active_id], context=context)
- order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
- return self.print_report(cr, uid, ids, context=context)
+ return self.launch_payment(cr, uid, ids, context=context)
-
- def create_invoice(self, cr, uid, ids, context=None):
- """
- Create a invoice
- """
- if context is None:
- context = {}
- active_ids = [context and context.get('active_id', False)]
- datas = {'ids': active_ids}
+ def launch_payment(self, cr, uid, ids, context=None):
return {
- 'type' : 'ir.actions.report.xml',
- 'report_name':'pos.invoice',
- 'datas' : datas,
+ 'name': _('Paiement'),
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'pos.make.payment',
+ 'view_id': False,
+ 'target': 'new',
+ 'views': False,
+ 'type': 'ir.actions.act_window',
}
def print_report(self, cr, uid, ids, context=None):
- """
- @summary: To get the date and print the report
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : retrun report
- """
- if context is None:
- context = {}
active_id = context.get('active_id', [])
datas = {'ids' : [active_id]}
return {
@@ -219,19 +75,30 @@ class pos_make_payment(osv.osv_memory):
'datas': datas,
}
+ def _default_journal(self, cr, uid, context=None):
+ res = pos_box_entries.get_journal(self, cr, uid, context=context)
+ return len(res)>1 and res[1][0] or False
+
+ def _default_amount(self, cr, uid, context=None):
+ order_obj = self.pool.get('pos.order')
+ active_id = context and context.get('active_id', False)
+ if active_id:
+ order = order_obj.browse(cr, uid, active_id, context=context)
+ return order.amount_total - order.amount_paid
+ return False
+
_columns = {
- 'journal': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
- 'product_id': fields.many2one('product.product', "Advance"),
+ 'journal': fields.selection(pos_box_entries.get_journal, "Payment Mode", required=True),
'amount': fields.float('Amount', digits=(16,2), required= True),
- 'payment_name': fields.char('Payment name', size=32, required=True),
- 'payment_date': fields.date('Payment date', required=True),
- 'is_acc': fields.boolean('Advance'),
- 'invoice_wanted': fields.boolean('Invoice'),
- 'num_sale': fields.char('Num.File', size=32),
- 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist'),
- 'partner_id': fields.many2one('res.partner', 'Customer'),
+ 'payment_name': fields.char('Payment Reference', size=32, required=True),
+ 'payment_date': fields.date('Payment Date', required=True),
+ }
+ _defaults = {
+ 'payment_date': time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'payment_name': _('Payment'),
+ 'amount': _default_amount,
+ 'journal': _default_journal
}
pos_make_payment()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/wizard/pos_payment.xml b/addons/point_of_sale/wizard/pos_payment.xml
index a6757be6b78..212c0d8c412 100644
--- a/addons/point_of_sale/wizard/pos_payment.xml
+++ b/addons/point_of_sale/wizard/pos_payment.xml
@@ -2,57 +2,37 @@
-
-
-
+ Add payment :pos.make.paymentform
-
-
-
-
- Sale by Users
- ir.actions.act_window
- pos.sales.user.today
- form
- form
- new
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_sales_user_current_user.xml b/addons/point_of_sale/wizard/pos_sales_user_current_user.xml
deleted file mode 100644
index e51ecfee760..00000000000
--- a/addons/point_of_sale/wizard/pos_sales_user_current_user.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
- Sales for Current User
- pos.sales.user.today.current_user
- form
-
-
-
-
-
-
-
-
-
-
-
-
- Sales for Current User
- ir.actions.act_window
- pos.sales.user.today.current_user
- form
- form
- new
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/point_of_sale/wizard/pos_scan_product.py b/addons/point_of_sale/wizard/pos_scan_product.py
deleted file mode 100644
index 8e1e4aace86..00000000000
--- a/addons/point_of_sale/wizard/pos_scan_product.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import osv,fields
-
-
-class pos_scan_product(osv.osv_memory):
- _name = 'pos.scan.product'
- _description = 'Scan product'
-
- _columns = {
- 'gencod': fields.char('Barcode', size=13, required=True)
- }
-
- def scan(self, cr, uid, ids, context=None):
- """
- To get the gencod and scan product
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param context: A standard dictionary
- @return : retrun gencod
- """
- if context is None:
- context = {}
- data=self.read(cr, uid, ids)[0]
- record_id = context and context.get('active_id', False)
- self. pool.get('pos.order.line')._scan_product(cr, uid, data['gencod'], 1, record_id)
- return {'gencod': False}
-
-pos_scan_product()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/point_of_sale/wizard/pos_scan_product_view.xml b/addons/point_of_sale/wizard/pos_scan_product_view.xml
deleted file mode 100644
index 3957c6c0415..00000000000
--- a/addons/point_of_sale/wizard/pos_scan_product_view.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- Scan product
- pos.scan.product
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Scan product
- ir.actions.act_window
- pos.scan.product
- form
- form
- new
-
-
-
-
-
\ No newline at end of file
diff --git a/addons/process/process.py b/addons/process/process.py
index 72c8bce10b4..524a3236e7b 100644
--- a/addons/process/process.py
+++ b/addons/process/process.py
@@ -84,12 +84,12 @@ class process_process(osv.osv):
process = pool.get('process.process').browse(cr, uid, id, context=context)
name = process.name
- resource = None
+ resource = False
state = 'N/A'
expr_context = {}
states = {}
- perm = None
+ perm = False
if res_model:
states = dict(pool.get(res_model).fields_get(cr, uid, context=context).get('state', {}).get('selection', {}))
@@ -242,7 +242,9 @@ class process_process(osv.osv):
for k, v in nodes.items():
y = v['y']
v['y'] = min(y - miny + 10, y)
-
+
+ nodes = dict([str(n_key), n_val] for n_key, n_val in nodes.iteritems())
+ transitions = dict([str(t_key), t_val] for t_key, t_val in transitions.iteritems())
return dict(name=name, resource=resource, state=state, perm=perm, notes=notes, nodes=nodes, transitions=transitions)
def copy(self, cr, uid, id, default=None, context=None):
diff --git a/addons/procurement/procurement.py b/addons/procurement/procurement.py
index f05ca64144d..9b298915f12 100644
--- a/addons/procurement/procurement.py
+++ b/addons/procurement/procurement.py
@@ -165,6 +165,10 @@ class procurement_order(osv.osv):
"""
return all(procurement.move_id.state == 'cancel' for procurement in self.browse(cr, uid, ids, context=context))
+ #This Function is create to avoid a server side Error Like 'ERROR:tests.mrp:name 'check_move' is not defined'
+ def check_move(self, cr, uid, ids, context=None):
+ pass
+
def check_move_done(self, cr, uid, ids, context=None):
""" Checks if move is done or not.
@return: True or False.
diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml
index b2f5e13b756..400412298cc 100644
--- a/addons/procurement/procurement_view.xml
+++ b/addons/procurement/procurement_view.xml
@@ -1,7 +1,7 @@
-
-
@@ -101,15 +101,14 @@
-
-
-
+
+
@@ -120,7 +119,7 @@
-
+
diff --git a/addons/product/product.py b/addons/product/product.py
index 863081a8155..78fc05fe7e7 100644
--- a/addons/product/product.py
+++ b/addons/product/product.py
@@ -75,7 +75,7 @@ class product_uom(osv.osv):
_description = 'Product Unit of Measure'
def _compute_factor_inv(self, factor):
- return factor and round(1.0 / factor, 6) or 0.0
+ return factor and (1.0 / factor) or 0.0
def _factor_inv(self, cursor, user, ids, name, arg, context=None):
res = {}
@@ -100,7 +100,7 @@ class product_uom(osv.osv):
'factor': fields.float('Ratio', required=True,digits=(12, 12),
help='How many times this UoM is smaller than the reference UoM in this category:\n'\
'1 * (reference unit) = ratio * (this unit)'),
- 'factor_inv': fields.function(_factor_inv, digits_compute=dp.get_precision('Product UoM'),
+ 'factor_inv': fields.function(_factor_inv, digits=(12,12),
fnct_inv=_factor_inv_write,
string='Ratio',
help='How many times this UoM is bigger than the reference UoM in this category:\n'\
@@ -250,9 +250,9 @@ class product_template(osv.osv):
result[product.id] = {field:False}
result[product.id]['seller_delay'] = 1
if product.seller_ids:
- partner_list = sorted([(partner_id.sequence, partner_id)
+ partner_list = [(partner_id.sequence, partner_id)
for partner_id in product.seller_ids
- if partner_id and isinstance(partner_id.sequence, (int, long))])
+ if partner_id and isinstance(partner_id.sequence, (int, long))]
main_supplier = partner_list and partner_list[0] and partner_list[0][1] or False
result[product.id]['seller_delay'] = main_supplier and main_supplier.delay or 1
result[product.id]['seller_qty'] = main_supplier and main_supplier.qty or 0.0
@@ -713,24 +713,16 @@ class product_supplierinfo(osv.osv):
for supplier_info in self.browse(cr, uid, ids, context=context):
for field in fields:
result[supplier_info.id] = {field:False}
- if supplier_info.product_uom.id:
- qty = product_uom_pool._compute_qty(cr, uid, supplier_info.product_uom.id, supplier_info.min_qty, to_uom_id=supplier_info.product_id.uom_id.id)
- else:
- qty = supplier_info.min_qty
+ qty = supplier_info.min_qty
result[supplier_info.id]['qty'] = qty
return result
- def _get_uom_id(self, cr, uid, context=None):
- if context is None:
- context = {}
- return context.get('uom_id', False)
-
_columns = {
'name' : fields.many2one('res.partner', 'Supplier', required=True,domain = [('supplier','=',True)], ondelete='cascade', help="Supplier of this product"),
'product_name': fields.char('Supplier Product Name', size=128, help="This supplier's product name will be used when printing a request for quotation. Keep empty to use the internal one."),
'product_code': fields.char('Supplier Product Code', size=64, help="This supplier's product code will be used when printing a request for quotation. Keep empty to use the internal one."),
'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."),
- 'product_uom': fields.many2one('product.uom', string="Supplier UoM", help="Choose here the Unit of Measure in which the prices and quantities are expressed below."),
+ 'product_uom': fields.related('product_id', 'uom_po_id', type='many2one', relation='product.uom', string="Supplier UoM", readonly="1", help="This comes from the product form."),
'min_qty': fields.float('Minimal Quantity', required=True, help="The minimal quantity to purchase to this supplier, expressed in the supplier Product UoM if not empty, in the default unit of measure of the product otherwise."),
'qty': fields.function(_calc_qty, store=True, type='float', string='Quantity', multi="qty", help="This is a quantity which is converted into Default Uom."),
'product_id' : fields.many2one('product.template', 'Product', required=True, ondelete='cascade', select=True),
@@ -743,17 +735,7 @@ class product_supplierinfo(osv.osv):
'sequence': lambda *a: 1,
'delay': lambda *a: 1,
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'product.supplierinfo', context=c),
- 'product_uom': _get_uom_id,
}
- def _check_uom(self, cr, uid, ids, context=None):
- for supplier_info in self.browse(cr, uid, ids, context=context):
- if supplier_info.product_uom and supplier_info.product_uom.category_id.id <> supplier_info.product_id.uom_id.category_id.id:
- return False
- return True
-
- _constraints = [
- (_check_uom, 'Error: The default UOM and the Supplier Product UOM must be in the same category.', ['product_uom']),
- ]
def price_get(self, cr, uid, supplier_ids, product_id, product_qty=1, context=None):
"""
Calculate price from supplier pricelist.
diff --git a/addons/product/wizard/product_installer.xml b/addons/product/wizard/product_installer.xml
index bdfbc1d32bf..01ddf25c56c 100644
--- a/addons/product/wizard/product_installer.xml
+++ b/addons/product/wizard/product_installer.xml
@@ -2,7 +2,7 @@
- Create some Products
+ Create or Import Productsir.actions.act_windowproduct.productform
diff --git a/addons/product_margin/__openerp__.py b/addons/product_margin/__openerp__.py
index 69553f1aced..9ef858fa9ec 100644
--- a/addons/product_margin/__openerp__.py
+++ b/addons/product_margin/__openerp__.py
@@ -37,6 +37,7 @@ The wizard to launch the report has several options to help you get the data you
'wizard/product_margin_view.xml',
'product_margin_view.xml'
],
+ 'test':['test/product_margin.yml'],
'demo_xml': [],
'installable': True,
'active': False,
diff --git a/addons/product_margin/test/product_margin.yml b/addons/product_margin/test/product_margin.yml
new file mode 100644
index 00000000000..fa8241ab206
--- /dev/null
+++ b/addons/product_margin/test/product_margin.yml
@@ -0,0 +1,25 @@
+-
+ In order to test the product_margin module, I create a product margin record
+-
+ !record {model: product.margin, id: product_margin_wiz0}:
+ from_date: !eval "'%s-01-01' %(datetime.now().year)"
+ to_date: !eval "'%s-12-31' %(datetime.now().year)"
+ invoice_state: open_paid
+-
+ I open margin for PC3
+-
+ !python {model: product.margin}: |
+ self.action_open_window(cr, uid, [ref("product_margin_wiz0")], {"lang": 'en_US',
+ "search_default_filter_to_sell": "1", "tz": False, "active_model": "product.product", "disable_log": True,
+ "active_ids": [ref("product.product_product_pc3")], "active_id": ref("product.product_product_pc3")})
+-
+ I read the fields of the product.
+-
+ !python {model: product.product}: |
+ fields = ['sale_avg_price', 'expected_margin_rate', 'total_margin_rate', 'total_cost', 'sale_num_invoiced',
+ 'total_margin', 'sales_gap', 'purchase_num_invoiced', 'expected_margin', 'turnover']
+ self.read(cr, uid, [ref("product_margin_wiz0")], fields, {"lang": 'en_US',
+ "search_default_filter_to_sell": "1", "tz": False, "active_model": "product.product",
+ "bin_size": True, "active_ids": [ref("product.product_product_pc3")],
+ "active_id": ref("product.product_product_pc3")})
+
diff --git a/addons/project/project.py b/addons/project/project.py
index 96bf2f30fdc..3565a877b61 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -430,7 +430,7 @@ class task(osv.osv):
'priority': fields.selection([('4','Very Low'), ('3','Low'), ('2','Medium'), ('1','Important'), ('0','Very important')], 'Priority'),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of tasks."),
'type_id': fields.many2one('project.task.type', 'Stage'),
- 'state': fields.selection([('draft', 'Draft'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
+ 'state': fields.selection([('draft', 'New'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
\n If the task is over, the states is set to \'Done\'.'),
'create_date': fields.datetime('Create Date', readonly=True,select=True),
diff --git a/addons/project/project_installer.xml b/addons/project/project_installer.xml
index d6538ac1310..3e04b919edd 100644
--- a/addons/project/project_installer.xml
+++ b/addons/project/project_installer.xml
@@ -1,27 +1,74 @@
+
-
+
-
- project.installer.view
- base.setup.installer
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ project.installer.view
+ base.setup.installer
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+ Project Management
+ 7
+
+
+
+ Create your initial projects
+ ir.actions.act_window
+ project.project
+ form
+ form
+
+
+
+
+
+
+
+
+ Configure Default Time Unit for Project
+ ir.actions.act_window
+ res.company
+
+ form
+ form
+ {'res_id' : user.company_id.id}
+
+
+
+
+
+
+
+ Review Task Stages
+ ir.actions.act_window
+ project.task.type
+ form
+ tree,form
+ {}
+ []
+
+
+
+
+
+
+
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 2bca9293e08..b49241de996 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -45,7 +45,7 @@
-
+
@@ -107,7 +107,8 @@
-
+
+
@@ -257,7 +258,7 @@
-
+
@@ -453,7 +454,7 @@
-
+
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index b9be53a2431..601f6e2004f 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -72,11 +72,11 @@
domain="[('date_start','<=', (datetime.date.today() - relativedelta(day=31, months=1)).strftime('%%Y-%%m-%%d')),('date_start','>=',(datetime.date.today() - relativedelta(day=1,months=1)).strftime('%%Y-%%m-%%d'))]"
help="Previous Month"/>
-
-
+
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index af756d34c5f..302000950a1 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -196,7 +196,7 @@ class project_issue(crm.crm_case, osv.osv):
domain="[('partner_id','=',partner_id)]"),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
- 'state': fields.selection([('draft', 'New'), ('open', 'To Do'), ('cancel', 'Cancelled'), ('done', 'Closed'),('pending', 'Pending'), ], 'State', size=16, readonly=True,
+ 'state': fields.selection([('draft', 'New'), ('open', 'To Solve'), ('cancel', 'Cancelled'), ('done', 'Closed'),('pending', 'Pending'), ], 'State', size=16, readonly=True,
help='The state is set to \'Draft\', when a case is created.\
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
diff --git a/addons/project_issue/project_issue_menu.xml b/addons/project_issue/project_issue_menu.xml
index 18c8779704f..d404ed7f03f 100644
--- a/addons/project_issue/project_issue_menu.xml
+++ b/addons/project_issue/project_issue_menu.xml
@@ -1,8 +1,6 @@
-
- ######################## ISSUE TRACKING (menu) ###########################
@@ -13,7 +11,7 @@
tree,calendar
- {"search_default_user_id": uid, "search_default_current":1, "search_default_project_id":project_id}
+ {"search_default_user_id": uid, "search_default_draft": 1, "search_default_project_id":project_id}Issues such as system bugs, customer complaints, and material breakdowns are collected here. You can define the stages assigned when solving the project issue (analysis, development, done). With the mailgateway module, issues can be integrated through an email address (example: support@mycompany.com)
@@ -40,7 +38,7 @@
-
+
-
+
@@ -124,7 +124,7 @@
icon="terp-mail-replied" type="action"/>
-
+
@@ -208,10 +208,8 @@
-
-
-
-
+
+
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index ef629b5b017..12ae4f7a870 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -53,7 +53,7 @@
-
@@ -63,11 +63,13 @@
-
-
+
+ string="New"
+ domain="[('state','=','draft')]"/>
+
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 6c5ef7890bf..7cd6697b67a 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -117,7 +117,7 @@ class project_phase(osv.osv):
'task_ids': fields.one2many('project.task', 'phase_id', "Project Tasks", states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'resource_ids': fields.one2many('project.resource.allocation', 'phase_id', "Project Resources",states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'responsible_id': fields.many2one('res.users', 'Responsible', states={'done':[('readonly',True)], 'cancelled':[('readonly',True)]}),
- 'state': fields.selection([('draft', 'Draft'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
+ 'state': fields.selection([('draft', 'New'), ('open', 'In Progress'), ('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the phase is created the state \'Draft\'.\n If the phase is started, the state becomes \'In Progress\'.\n If review is needed the phase is in \'Pending\' state.\
\n If the phase is over, the states is set to \'Done\'.'),
'total_hours': fields.function(_compute, string='Total Hours'),
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index c53f4196202..49b306ebfd5 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -140,7 +140,7 @@
-
+
@@ -267,7 +267,7 @@
-
+
diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index 53e0d9e442d..4622bd305c7 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -61,8 +61,8 @@
-
@@ -132,12 +132,11 @@
-
-
+ domain="['|','&',('sprint_id.date_start','<=',time.strftime('%%Y-%%m-%%d')), ('sprint_id.date_stop','>=',time.strftime('%%Y-%%m-%%d')), ('state','=','draft')]"
+ help="Draft Backlogs"/>
+
@@ -179,7 +178,7 @@
Product Backlogsproject.scrum.product.backlogform
- {'search_default_current': 1,'search_default_user_id':uid,'search_default_project_id':project_id}
+ {'search_default_current':1, 'search_default_user_id':uid,'search_default_project_id':project_id}The scrum agile methodology is used in software development projects. The Product Backlog is the list of features to be implemented. A product backlog can be planified in a development sprint and may be split into several tasks. The product backlog is managed by the product owner of the project.
@@ -225,7 +224,7 @@
+ string="Burndown Chart" type="action" icon="gtk-print"/>
@@ -274,7 +273,7 @@
-
+
@@ -303,7 +302,7 @@
+ string="Burndown Chart" type="action" icon="gtk-print"/>
@@ -320,9 +319,8 @@
-
-
-
+
+
@@ -351,7 +349,7 @@
formtree,form,calendar
- {"search_default_filter_current": 1}
+ {"search_default_current": 1}The scrum agile methodology is used in software development projects. In this methodology, a sprint is a short period of time (e.g. one month) during which the team implements a list of product backlogs. The sprint review is organized when the team presents its work to the customer and product owner.
@@ -589,7 +587,7 @@
-
+
@@ -597,7 +595,7 @@
-
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index d6c1d4c903f..dcf29bfaceb 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -540,7 +540,7 @@ class purchase_order(osv.osv):
if not order_infos:
order_infos.update({
'origin': porder.origin,
- 'date_order': time.strftime('%Y-%m-%d'),
+ 'date_order': porder.date_order,
'partner_id': porder.partner_id.id,
'partner_address_id': porder.partner_address_id.id,
'dest_address_id': porder.dest_address_id.id,
@@ -553,6 +553,8 @@ class purchase_order(osv.osv):
'fiscal_position': porder.fiscal_position and porder.fiscal_position.id or False,
})
else:
+ if porder.date_order < order_infos['date_order']:
+ order_infos['date_order'] = porder.date_order
if porder.notes:
order_infos['notes'] = (order_infos['notes'] or '') + ('\n%s' % (porder.notes,))
if porder.origin:
@@ -665,7 +667,7 @@ class purchase_order_line(osv.osv):
def product_id_change(self, cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=False, fiscal_position=False, date_planned=False,
- name=False, price_unit=False, notes=False):
+ name=False, price_unit=False, notes=False, context={}):
if not pricelist:
raise osv.except_osv(_('No Pricelist !'), _('You have to select a pricelist or a supplier in the purchase form !\nPlease set one before choosing a product.'))
if not partner_id:
@@ -738,10 +740,10 @@ class purchase_order_line(osv.osv):
def product_uom_change(self, cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=False, fiscal_position=False, date_planned=False,
- name=False, price_unit=False, notes=False):
+ name=False, price_unit=False, notes=False, context={}):
res = self.product_id_change(cr, uid, ids, pricelist, product, qty, uom,
partner_id, date_order=date_order, fiscal_position=fiscal_position, date_planned=date_planned,
- name=name, price_unit=price_unit, notes=notes)
+ name=name, price_unit=price_unit, notes=notes, context=context)
if 'product_uom' in res['value']:
if uom and (uom != res['value']['product_uom']) and res['value']['product_uom']:
seller_uom_name = self.pool.get('product.uom').read(cr, uid, [res['value']['product_uom']], ['name'])[0]['name']
@@ -818,8 +820,9 @@ class procurement_order(osv.osv):
price = pricelist_obj.price_get(cr, uid, [pricelist_id], procurement.product_id.id, qty, partner_id, {'uom': uom_id})[pricelist_id]
- newdate = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
- newdate = (newdate - relativedelta(days=company.po_lead)) - relativedelta(days=seller_delay)
+ order_date = datetime.strptime(procurement.date_planned, '%Y-%m-%d %H:%M:%S')
+ schedule_date = (order_date - relativedelta(days=company.po_lead))
+ order_dates = schedule_date - relativedelta(days=seller_delay)
#Passing partner_id to context for purchase order line integrity of Line name
context.update({'lang': partner.lang, 'partner_id': partner_id})
@@ -833,8 +836,8 @@ class procurement_order(osv.osv):
'product_qty': qty,
'product_id': procurement.product_id.id,
'product_uom': uom_id,
- 'price_unit': price,
- 'date_planned': newdate.strftime('%Y-%m-%d %H:%M:%S'),
+ 'price_unit': price or 0.0,
+ 'date_planned': schedule_date.strftime('%Y-%m-%d %H:%M:%S'),
'move_dest_id': res_id,
'notes': product.description_purchase,
'taxes_id': [(6,0,taxes)],
@@ -846,6 +849,7 @@ class procurement_order(osv.osv):
'partner_address_id': address_id,
'location_id': procurement.location_id.id,
'pricelist_id': pricelist_id,
+ 'date_order': order_dates.strftime('%Y-%m-%d %H:%M:%S'),
'company_id': procurement.company_id.id,
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False
}
diff --git a/addons/purchase/purchase_sequence.xml b/addons/purchase/purchase_sequence.xml
index 7f426b53be6..e8a7f43c503 100644
--- a/addons/purchase/purchase_sequence.xml
+++ b/addons/purchase/purchase_sequence.xml
@@ -11,6 +11,7 @@
purchase.orderPO5
+
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 035dbbc23b9..cb7224faaf0 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -194,7 +194,7 @@
-
+
@@ -234,20 +234,19 @@
-
- purchase.order.list.select
+
+ request.quotation.selectpurchase.ordersearch
-
-
+
@@ -268,6 +267,42 @@
+
+
+ purchase.order.list.select
+ purchase.order
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
purchase.order.treepurchase.order
@@ -294,10 +329,9 @@
Requests for Quotationir.actions.act_windowpurchase.order
- form{'search_default_draft': 1}tree,form,graph,calendar
-
+ You can create a request for quotation when you want to buy products to a supplier but the purchase is not confirmed yet. Use also this menu to review requests for quotation created automatically based on your logistic rules (minimum stock, MTO, etc). You can convert the request for quotation into a purchase order once the order is confirmed. If you use the extended interface (from user's preferences), you can select the way to control your supplier invoices: based on the order, based on the receptions or manual encoding.
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
index be99a41a3cc..c6d70947893 100644
--- a/addons/purchase/wizard/purchase_installer.py
+++ b/addons/purchase/wizard/purchase_installer.py
@@ -29,4 +29,28 @@ class purchase_installer(osv.osv_memory):
}
purchase_installer()
+class purchase_config_wizard(osv.osv_memory):
+ _name = 'purchase.config.wizard'
+
+ _columns = {
+ 'default_method' : fields.selection(
+ [('manual', 'Based on Purchase Orders'),
+ ('picking', 'Based on Receptions'),
+ ('order', 'Pre-Generate Draft Invoices on Purchase Orders'),
+ ],
+ 'Default Invoicing Control Method',
+ required=True,
+ ),
+ }
+
+ def validate_cb(self, cr, uid, ids, context=None):
+ wizard = self.browse(cr, uid, ids, context=context)[0]
+
+ proxy = self.pool.get('ir.values')
+ proxy.set(cr, uid, 'default', False, 'invoice_method', ['purchase.order'], wizard.default_method),
+
+ return {'type' : 'ir.actions.act_window_close'}
+
+purchase_config_wizard()
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase/wizard/purchase_installer.xml b/addons/purchase/wizard/purchase_installer.xml
index e296b14ca91..cf9b6a985db 100644
--- a/addons/purchase/wizard/purchase_installer.xml
+++ b/addons/purchase/wizard/purchase_installer.xml
@@ -17,5 +17,55 @@
+
+
+ Create or Import Suppliers
+ ir.actions.act_window
+ res.partner
+ form
+ tree,form
+ {'search_default_supplier': 1, 'default_supplier' : True, 'default_customer' : False}
+
+ Create or Import Suppliers and their contacts manually from this form or you can import your existing partners by CSV spreadsheet from "Import Data" wizard
+
+
+
+ Purchase Management
+ 5
+
+
+
+
+
+
+
+
+ purchase.view_purchase_config
+ form
+ purchase.config.wizard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Set the Default Invoicing Control Method
+ purchase.config.wizard
+ form
+ form
+ new
+
+
+
+
+
diff --git a/addons/purchase_double_validation/purchase_double_validation_installer.xml b/addons/purchase_double_validation/purchase_double_validation_installer.xml
index bc39c837b6b..9a06f66164a 100644
--- a/addons/purchase_double_validation/purchase_double_validation_installer.xml
+++ b/addons/purchase_double_validation/purchase_double_validation_installer.xml
@@ -40,15 +40,10 @@
new
-
- Purchase Management
- 5
-
-
-
+
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index cb31709b20e..00c449dfd7d 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -41,7 +41,7 @@ class purchase_requisition(osv.osv):
'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders',states={'done': [('readonly', True)]}),
'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase',states={'done': [('readonly', True)]}),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'),
- 'state': fields.selection([('draft','Draft'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
+ 'state': fields.selection([('draft','New'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
}
_defaults = {
'date_start': time.strftime('%Y-%m-%d %H:%M:%S'),
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 27dcedf9bd9..06ee94c3941 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -21,11 +21,26 @@
purchase.order
-
+
+
+
+
+ request.for.quotation.select.inherit
+ form
+ purchase.order
+
+
+
+
+
+
+
+
+
purchase.requisition.formform
@@ -60,9 +75,9 @@
-
+
-
+
@@ -78,8 +93,8 @@
-
-
+
+
@@ -120,19 +135,20 @@
-
+
+
-
-
+
+
@@ -187,12 +203,12 @@
-
-
+
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index e4f917ba063..b266b5b6391 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -38,7 +38,7 @@ class sale_report(osv.osv):
('10', 'October'), ('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'uom_name': fields.char('Reference UoM', size=128, readonly=True),
+ 'product_uom': fields.many2one('product.uom', 'UoM', readonly=True),
'product_uom_qty': fields.float('# of Qty', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
@@ -67,51 +67,41 @@ class sale_report(osv.osv):
tools.drop_view_if_exists(cr, 'sale_report')
cr.execute("""
create or replace view sale_report as (
- select el.*,
- -- (select count(1) from sale_order_line where order_id = s.id) as nbr,
- (select 1) as nbr,
- s.date_order as date,
- s.date_confirm as date_confirm,
- to_char(s.date_order, 'YYYY') as year,
- to_char(s.date_order, 'MM') as month,
- to_char(s.date_order, 'YYYY-MM-DD') as day,
- s.partner_id as partner_id,
- s.user_id as user_id,
- s.shop_id as shop_id,
- s.company_id as company_id,
- extract(epoch from avg(date_trunc('day',s.date_confirm)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay,
- s.state,
- s.shipped,
- s.shipped::integer as shipped_qty_1,
- s.pricelist_id as pricelist_id,
- s.project_id as analytic_account_id
+ select
+ min(l.id) as id,
+ l.product_id as product_id,
+ t.uom_id as product_uom,
+ sum(l.product_uom_qty / u.factor * u2.factor) as product_uom_qty,
+ sum(l.product_uom_qty * l.price_unit * (100.0-l.discount) / 100.0) as price_total,
+ 1 as nbr,
+ s.date_order as date,
+ s.date_confirm as date_confirm,
+ to_char(s.date_order, 'MM') as month,
+ to_char(s.date_order, 'YYYY-MM-DD') as day,
+ s.partner_id as partner_id,
+ s.user_id as user_id,
+ s.shop_id as shop_id,
+ s.company_id as company_id,
+ extract(epoch from avg(date_trunc('day',s.date_confirm)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay,
+ s.state,
+ t.categ_id as categ_id,
+ s.shipped,
+ s.shipped::integer as shipped_qty_1,
+ s.pricelist_id as pricelist_id,
+ s.project_id as analytic_account_id
from
- sale_order s,
- (
- select l.id as id,
- l.product_id as product_id,
- (case when u.uom_type not in ('reference') then
- (select name from product_uom where uom_type='reference' and category_id=u.category_id)
- else
- u.name
- end) as uom_name,
- sum(l.product_uom_qty * u.factor) as product_uom_qty,
- sum(l.product_uom_qty * l.price_unit) as price_total,
- pt.categ_id, l.order_id
- from
- sale_order_line l ,product_uom u, product_product p, product_template pt
- where u.id = l.product_uom
- and pt.id = p.product_tmpl_id
- and p.id = l.product_id
- group by l.id, l.order_id, l.product_id, u.name, pt.categ_id, u.uom_type, u.category_id) el
- where s.id = el.order_id
- group by el.id,
- el.product_id,
- el.uom_name,
- el.product_uom_qty,
- el.price_total,
- el.categ_id,
- el.order_id,
+ sale_order s
+ left join sale_order_line l on (s.id=l.order_id)
+ left join product_product p on (l.product_id=p.id)
+ left join product_template t on (p.product_tmpl_id=t.id)
+ left join product_uom u on (u.id=l.product_uom)
+ left join product_uom u2 on (u2.id=t.uom_id)
+ group by
+ l.product_id,
+ l.product_uom_qty,
+ l.order_id,
+ t.uom_id,
+ t.categ_id,
s.date_order,
s.date_confirm,
s.partner_id,
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 6127c166f40..f9939190a7c 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -59,7 +59,7 @@
domain="[('date','<=',(datetime.date.today()+relativedelta(day=31)).strftime('%%Y-%%m-%%d')),('date','>=',(datetime.date.today()-relativedelta(day=1)).strftime('%%Y-%%m-%%d'))]"
help="Sales order created in current month"/>
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 12c27c197ed..f2f953398a2 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -199,7 +199,7 @@ class sale_order(osv.osv):
'state': fields.selection([
('draft', 'Quotation'),
('waiting_date', 'Waiting Schedule'),
- ('manual', 'Manual In Progress'),
+ ('manual', 'To Invoice'),
('progress', 'In Progress'),
('shipping_except', 'Shipping Exception'),
('invoice_except', 'Invoice Exception'),
@@ -479,6 +479,7 @@ class sale_order(osv.osv):
picking_obj = self.pool.get('stock.picking')
invoice = self.pool.get('account.invoice')
obj_sale_order_line = self.pool.get('sale.order.line')
+ partner_currency = {}
if context is None:
context = {}
# If date was specified, use it as date invoiced, usefull when invoices are generated this month and put the
@@ -486,6 +487,13 @@ class sale_order(osv.osv):
if date_inv:
context['date_inv'] = date_inv
for o in self.browse(cr, uid, ids, context=context):
+ currency_id = o.pricelist_id.currency_id.id
+ if (o.partner_id.id in partner_currency) and (partner_currency[o.partner_id.id] <> currency_id):
+ raise osv.except_osv(
+ _('Error !'),
+ _('You cannot group sales having different currencies for the same partner.'))
+
+ partner_currency[o.partner_id.id] = currency_id
lines = []
for line in o.order_line:
if line.invoiced:
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index a12a4c566f5..b7f5d11e15f 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -180,7 +180,7 @@
-
+
diff --git a/addons/sale_layout/i18n/da.po b/addons/sale_layout/i18n/da.po
new file mode 100644
index 00000000000..230becf3b19
--- /dev/null
+++ b/addons/sale_layout/i18n/da.po
@@ -0,0 +1,292 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-09-24 17:46+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-25 04:41+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Sub Total"
+msgstr "Sub total"
+
+#. module: sale_layout
+#: model:ir.module.module,description:sale_layout.module_meta_information
+msgid ""
+"\n"
+" This module provides features to improve the layout of the Sales Order.\n"
+"\n"
+" It gives you the possibility to\n"
+" * order all the lines of a sales order\n"
+" * add titles, comment lines, sub total lines\n"
+" * draw horizontal lines and put page breaks\n"
+"\n"
+" "
+msgstr ""
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Title"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Disc. (%)"
+msgstr ""
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Note"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Unit Price"
+msgstr "Enhedspris"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Order N°"
+msgstr "Ordre nummer"
+
+#. module: sale_layout
+#: field:sale.order,abstract_line_ids:0
+msgid "Order Lines"
+msgstr "Ordre linier"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Disc.(%)"
+msgstr ""
+
+#. module: sale_layout
+#: field:sale.order.line,layout_type:0
+msgid "Layout Type"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Seq."
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "UoM"
+msgstr ""
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Product"
+msgstr ""
+
+#. module: sale_layout
+#: sql_constraint:sale.order:0
+msgid "Order Reference must be unique !"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Description"
+msgstr "Beskrivelse"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Manual Description"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Our Salesman"
+msgstr "Vores sælger"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Automatic Declaration"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Invoice Lines"
+msgstr "Faktura linier"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Quantity"
+msgstr "Antal"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Quotation N°"
+msgstr "Tilbud nummer"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "VAT"
+msgstr "Moms"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Make Invoice"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Properties"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Invoice address :"
+msgstr "Faktura adresse:"
+
+#. module: sale_layout
+#: model:ir.module.module,shortdesc:sale_layout.module_meta_information
+msgid "Sale Order Layout"
+msgstr "Salgsordre layout"
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Page Break"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Notes"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Date Ordered"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Shipping address :"
+msgstr "Leveringsadresse"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Taxes"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Net Total :"
+msgstr "Netto total:"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Tel. :"
+msgstr "Tel:"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Total :"
+msgstr "Total:"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Payment Terms"
+msgstr "Betalingsbetingelser"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "History"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Sale Order Lines"
+msgstr "Salgsordre linier"
+
+#. module: sale_layout
+#: selection:sale.order.line,layout_type:0
+msgid "Separator Line"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Your Reference"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Quotation Date"
+msgstr "Tilbudsdato"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "TVA :"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Qty"
+msgstr "Antal"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "States"
+msgstr "Stater"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Sales order lines"
+msgstr ""
+
+#. module: sale_layout
+#: model:ir.actions.report.xml,name:sale_layout.sale_order_1
+msgid "Order with Layout"
+msgstr ""
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Extra Info"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Taxes :"
+msgstr ""
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Fax :"
+msgstr "Fax:"
+
+#. module: sale_layout
+#: model:ir.model,name:sale_layout.model_sale_order
+msgid "Sales Order"
+msgstr "Salgsordre"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Order Line"
+msgstr "Ordre linie"
+
+#. module: sale_layout
+#: report:sale.order.layout:0
+msgid "Price"
+msgstr "Pris"
+
+#. module: sale_layout
+#: model:ir.model,name:sale_layout.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Salgsordrelinie"
+
+#. module: sale_layout
+#: view:sale.order:0
+msgid "Stock Moves"
+msgstr "Lagerflytninger"
diff --git a/addons/sale_margin/__init__.py b/addons/sale_margin/__init__.py
index 425dcf6352d..ad51e586046 100644
--- a/addons/sale_margin/__init__.py
+++ b/addons/sale_margin/__init__.py
@@ -19,7 +19,6 @@
##############################################################################
import sale_margin
-import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/sale_margin/__openerp__.py b/addons/sale_margin/__openerp__.py
index 1121b178266..1170c72485c 100644
--- a/addons/sale_margin/__openerp__.py
+++ b/addons/sale_margin/__openerp__.py
@@ -33,7 +33,7 @@ This gives the profitability by calculating the difference between the Unit Pric
"depends":["sale"],
"demo_xml":[],
'test': ['test/sale_margin.yml'],
- "update_xml":["security/ir.model.access.csv","sale_margin_view.xml","report/report_margin_view.xml"],
+ "update_xml":["security/ir.model.access.csv","sale_margin_view.xml"],
"active": False,
"installable": True,
"certificate" : "001165700015525701661",
diff --git a/addons/sale_margin/report/report_margin.py b/addons/sale_margin/report/report_margin.py
deleted file mode 100644
index a318a6c17b8..00000000000
--- a/addons/sale_margin/report/report_margin.py
+++ /dev/null
@@ -1,90 +0,0 @@
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2009 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields,osv
-import pooler
-from tools import config
-import time
-import tools
-
-
-
-class report_account_invoice_product(osv.osv):
- _name = 'report.account.invoice.product'
- _auto = False
- _description = "Invoice Statistics"
- _columns = {
- 'date': fields.date('Date', readonly=True),
- 'year': fields.char('Year', size=4, readonly=True),
- 'day': fields.char('Day', size=128, readonly=True),
- 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
- ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
- ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
- 'type': fields.selection([
- ('out_invoice','Customer Invoice'),
- ('in_invoice','Supplier Invoice'),
- ('out_refund','Customer Refund'),
- ('in_refund','Supplier Refund'),
- ],'Type', readonly=True),
- 'state': fields.selection([
- ('draft','Draft'),
- ('proforma','Pro-forma'),
- ('open','Open'),
- ('paid','Paid'),
- ('cancel','Canceled')
- ],'State', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True),
- 'amount': fields.float('Amount', readonly=True),
- 'cost_price': fields.float('Cost Price', readonly=True),
- 'margin': fields.float('Margin', readonly=True),
- 'categ_id': fields.many2one('product.category', 'Categories', readonly=True),
- 'quantity': fields.float('Quantity', readonly=True),
- 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
- }
- def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_account_invoice_product')
- cr.execute("""
- create or replace view report_account_invoice_product as (
- select
- min(l.id) as id,
- i.create_date as date,
- to_char(date_trunc('day',i.date_invoice), 'YYYY') as year,
- to_char(date_trunc('day',i.date_invoice), 'MM') as month,
- to_char(date_trunc('day',i.date_invoice), 'YYYY-MM-DD') as day,
- i.type,
- i.state,
- l.product_id,
- t.categ_id,
- i.partner_id,
- sum(l.quantity * l.price_unit * (1.0 - l.discount/100.0)) as amount,
- sum(l.quantity * l.cost_price) as cost_price,
- sum((l.quantity * l.price_unit * (1.0 - l.discount/100.0) - (l.quantity * l.cost_price))) as margin,
- sum(l.quantity) as quantity
- from account_invoice i
- left join account_invoice_line l on (i.id = l.invoice_id)
- left join product_product p on (p.id = l.product_id)
- left join product_template t on (t.id = p.product_tmpl_id)
- group by t.categ_id,i.partner_id,l.product_id, i.date_invoice, i.type, i.state,i.create_date
- )
- """)
-report_account_invoice_product()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/sale_margin/report/report_margin_view.xml b/addons/sale_margin/report/report_margin_view.xml
deleted file mode 100644
index c826ea9c853..00000000000
--- a/addons/sale_margin/report/report_margin_view.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
-
-
-
- report.account.invoice.product.tree
- report.account.invoice.product
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- account.invoice.product.filter
- report.account.invoice.product
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- report.account.invoice.product.graph
- report.account.invoice.product
- graph
-
-
-
-
-
-
-
-
-
- Invoice Analysis
- report.account.invoice.product
- form
- tree,graph
- {"search_default_At Date":1,'group_by_no_leaf':1,'group_by':[]}
-
- This report gives you an overview of all the invoices generated by the system. You can sort and group your results by specific selection criteria to quickly find what you are looking for.
-
-
-
-
-
-
-
diff --git a/addons/sale_margin/security/ir.model.access.csv b/addons/sale_margin/security/ir.model.access.csv
index d7752fa1961..0343f29f43a 100644
--- a/addons/sale_margin/security/ir.model.access.csv
+++ b/addons/sale_margin/security/ir.model.access.csv
@@ -1,2 +1 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_report_account_invoice_product","report.account.invoice.product","model_report_account_invoice_product","account.group_account_manager",1,1,1,1
diff --git a/addons/share/i18n/da.po b/addons/share/i18n/da.po
new file mode 100644
index 00000000000..d4839ed6e84
--- /dev/null
+++ b/addons/share/i18n/da.po
@@ -0,0 +1,476 @@
+# Danish translation for openobject-addons
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-01-11 11:16+0000\n"
+"PO-Revision-Date: 2011-09-23 17:42+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Danish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-09-24 04:59+0000\n"
+"X-Generator: Launchpad (build 14012)\n"
+
+#. module: share
+#: code:addons/share/web/editors.py:15
+#, python-format
+msgid "Sharing"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:462
+#, python-format
+msgid ""
+"This additional data has been automatically added to your current access.\n"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Existing External Users"
+msgstr ""
+
+#. module: share
+#: help:res.groups,share:0
+msgid "Group created to set access rights for sharing data with some users."
+msgstr ""
+
+#. module: share
+#: model:ir.module.module,shortdesc:share.module_meta_information
+msgid "Share Management"
+msgstr ""
+
+#. module: share
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:76
+#, python-format
+msgid "Sharing Wizard - Step 1"
+msgstr ""
+
+#. module: share
+#: model:ir.actions.act_window,name:share.action_share_wizard
+#: model:ir.ui.menu,name:share.menu_action_share_wizard
+msgid "Share Access Rules"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:453
+#, python-format
+msgid ""
+"Dear,\n"
+"\n"
+"%s\n"
+"\n"
+msgstr ""
+
+#. module: share
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Next"
+msgstr ""
+
+#. module: share
+#: help:share.wizard,action_id:0
+msgid ""
+"The action that opens the screen containing the data you wish to share."
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:68
+#, python-format
+msgid "Please specify \"share_root_url\" in context"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Congratulations, you have successfully setup a new shared access!"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:275
+#, python-format
+msgid "(Copy for sharing)"
+msgstr ""
+
+#. module: share
+#: field:share.wizard.result.line,newly_created:0
+msgid "Newly created"
+msgstr ""
+
+#. module: share
+#: field:share.wizard,share_root_url:0
+msgid "Generic Share Access URL"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:457
+#, python-format
+msgid ""
+"You may use the following login and password to get access to this protected "
+"area:\n"
+msgstr ""
+
+#. module: share
+#: view:res.groups:0
+msgid "Regular groups only (no share groups"
+msgstr ""
+
+#. module: share
+#: selection:share.wizard,access_mode:0
+msgid "Read & Write"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Share wizard: step 2"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Share wizard: step 0"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Share wizard: step 1"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:458
+#: field:share.wizard.result.line,login:0
+#, python-format
+msgid "Username"
+msgstr ""
+
+#. module: share
+#: field:res.users,share:0
+msgid "Share User"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:452
+#, python-format
+msgid "%s has shared OpenERP %s information with you"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Finish"
+msgstr ""
+
+#. module: share
+#: field:share.wizard,user_ids:0
+#: field:share.wizard.user,user_id:0
+msgid "Users"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:103
+#, python-format
+msgid ""
+"This username (%s) already exists, perhaps data has already been shared with "
+"this person.\n"
+"You may want to try selecting existing shared users instead."
+msgstr ""
+
+#. module: share
+#: field:share.wizard,new_users:0
+msgid "New users"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_res_groups
+msgid "res.groups"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:149
+#, python-format
+msgid "%s (Shared)"
+msgstr ""
+
+#. module: share
+#: sql_constraint:res.groups:0
+msgid "The name of the group must be unique !"
+msgstr ""
+
+#. module: share
+#: selection:share.wizard,user_type:0
+msgid "New users (emails required)"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:418
+#, python-format
+msgid "Sharing filter created by user %s (%s) for group %s"
+msgstr ""
+
+#. module: share
+#: view:res.groups:0
+msgid "Groups"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Select the desired shared access mode:"
+msgstr ""
+
+#. module: share
+#: field:res.groups,share:0
+msgid "Share Group"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:459
+#: field:share.wizard.result.line,password:0
+#, python-format
+msgid "Password"
+msgstr "Adgangskode"
+
+#. module: share
+#: view:share.wizard:0
+msgid "Who would you want to share this data with?"
+msgstr ""
+
+#. module: share
+#: model:ir.module.module,description:share.module_meta_information
+msgid ""
+"The goal is to implement a generic sharing mechanism, where user of OpenERP\n"
+"can share data from OpenERP to their colleagues, customers, or friends.\n"
+"The system will work by creating new users and groups on the fly, and by\n"
+"combining the appropriate access rights and ir.rules to ensure that the "
+"/shared\n"
+"users/ will only have access to the correct data.\n"
+" "
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:102
+#, python-format
+msgid "User already exists"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Send Email Notification(s)"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:463
+#, python-format
+msgid ""
+"You may use your existing login and password to view it. As a reminder, your "
+"login is %s.\n"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:460
+#, python-format
+msgid "Database"
+msgstr "Database"
+
+#. module: share
+#: model:ir.model,name:share.model_share_wizard_user
+msgid "share.wizard.user"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid ""
+"Please select the action that opens the screen containing the data you want "
+"to share."
+msgstr ""
+
+#. module: share
+#: selection:share.wizard,user_type:0
+msgid "Existing external users"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+#: field:share.wizard,result_line_ids:0
+msgid "Summary"
+msgstr ""
+
+#. module: share
+#: field:share.wizard,user_type:0
+msgid "Users to share with"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:304
+#, python-format
+msgid "Indirect sharing filter created by user %s (%s) for group %s"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:448
+#, python-format
+msgid "Email required"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:240
+#, python-format
+msgid "Copied access for sharing"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid ""
+"Optionally, you may specify an additional domain restriction that will be "
+"applied to the shared data."
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "New Users (please provide one e-mail address per line below)"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:448
+#, python-format
+msgid ""
+"The current user must have an email address configured in User Preferences "
+"to be able to send outgoing emails."
+msgstr ""
+
+#. module: share
+#: view:res.users:0
+msgid "Regular users only (no share user)"
+msgstr ""
+
+#. module: share
+#: field:share.wizard.result.line,share_url:0
+msgid "Share URL"
+msgstr ""
+
+#. module: share
+#: field:share.wizard,domain:0
+msgid "Domain"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:314
+#, python-format
+msgid ""
+"Sorry, the current screen and filter you are trying to share are not "
+"supported at the moment.\n"
+"You may want to try a simpler filter."
+msgstr ""
+
+#. module: share
+#: field:share.wizard,access_mode:0
+msgid "Access Mode"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Access info"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:454
+#, python-format
+msgid ""
+"To access it, you can go to the following URL:\n"
+" %s"
+msgstr ""
+
+#. module: share
+#: field:share.wizard,action_id:0
+msgid "Action to share"
+msgstr ""
+
+#. module: share
+#: code:addons/share/web/editors.py:18
+#, python-format
+msgid "Share"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:434
+#, python-format
+msgid "Sharing Wizard - Step 2"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Here is a summary of the access points you have just created:"
+msgstr ""
+
+#. module: share
+#: model:ir.model,name:share.model_share_wizard_result_line
+msgid "share.wizard.result.line"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:313
+#, python-format
+msgid "Sharing access could not be setup"
+msgstr ""
+
+#. module: share
+#: model:ir.actions.act_window,name:share.action_share_wizard
+#: model:ir.actions.act_window,name:share.action_share_wizard_step1
+#: model:ir.model,name:share.model_share_wizard
+#: model:ir.ui.menu,name:share.menu_action_share_wizard
+#: field:share.wizard.result.line,share_wizard_id:0
+msgid "Share Wizard"
+msgstr ""
+
+#. module: share
+#: help:share.wizard,user_type:0
+msgid "Select the type of user(s) you would like to share data with."
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Cancel"
+msgstr ""
+
+#. module: share
+#: view:share.wizard:0
+msgid "Close"
+msgstr ""
+
+#. module: share
+#: help:res.users,share:0
+msgid ""
+"External user with limited access, created only for the purpose of sharing "
+"data."
+msgstr ""
+
+#. module: share
+#: help:share.wizard,domain:0
+msgid "Optional domain for further data filtering"
+msgstr ""
+
+#. module: share
+#: selection:share.wizard,access_mode:0
+msgid "Read-only"
+msgstr ""
+
+#. module: share
+#: code:addons/share/wizard/share_wizard.py:323
+#, python-format
+msgid "*usual password*"
+msgstr ""
diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py
index 70dc37ec2da..c6ea30db330 100644
--- a/addons/stock/__openerp__.py
+++ b/addons/stock/__openerp__.py
@@ -80,6 +80,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
],
'test': ['test/stock_test.yml',
'test/stock_report.yml',
+ 'test/stock_test_wizard.yml',
],
'installable': True,
'active': False,
diff --git a/addons/stock/product_view.xml b/addons/stock/product_view.xml
index 226fa13b594..80d7ed6efa0 100644
--- a/addons/stock/product_view.xml
+++ b/addons/stock/product_view.xml
@@ -82,7 +82,7 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ES
-
- 1
-
-
- PP
-
-
-
-
-
diff --git a/addons/stock/report/__init__.py b/addons/stock/report/__init__.py
index 18bfe2609c2..412e77f3f17 100644
--- a/addons/stock/report/__init__.py
+++ b/addons/stock/report/__init__.py
@@ -20,7 +20,6 @@
##############################################################################
import product_stock
-import ups
import picking
import lot_overview_all
import report_stock
diff --git a/addons/stock/report/report_stock_move.py b/addons/stock/report/report_stock_move.py
index 07289a4379a..d728cbf0e29 100644
--- a/addons/stock/report/report_stock_move.py
+++ b/addons/stock/report/report_stock_move.py
@@ -86,19 +86,19 @@ class report_stock_move(osv.osv):
sum(al.in_value - al.out_value) as value
FROM (SELECT
CASE WHEN sp.type in ('out') THEN
- sum(sm.product_qty * pu.factor)
+ sum(sm.product_qty * pu.factor / pu2.factor)
ELSE 0.0
END AS out_qty,
CASE WHEN sp.type in ('in') THEN
- sum(sm.product_qty * pu.factor)
+ sum(sm.product_qty * pu.factor / pu2.factor)
ELSE 0.0
END AS in_qty,
CASE WHEN sp.type in ('out') THEN
- sum(sm.product_qty * pu.factor) * pt.standard_price
+ sum(sm.product_qty * pu.factor / pu2.factor) * pt.standard_price
ELSE 0.0
END AS out_value,
CASE WHEN sp.type in ('in') THEN
- sum(sm.product_qty * pu.factor) * pt.standard_price
+ sum(sm.product_qty * pu.factor / pu2.factor) * pt.standard_price
ELSE 0.0
END AS in_value,
min(sm.id) as sm_id,
@@ -126,6 +126,7 @@ class report_stock_move(osv.osv):
LEFT JOIN stock_picking sp ON (sm.picking_id=sp.id)
LEFT JOIN product_product pp ON (sm.product_id=pp.id)
LEFT JOIN product_uom pu ON (sm.product_uom=pu.id)
+ LEFT JOIN product_uom pu2 ON (sm.product_uom=pu2.id)
LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
LEFT JOIN stock_location sl ON (sm.location_id = sl.id)
@@ -176,17 +177,16 @@ CREATE OR REPLACE view report_stock_inventory AS (
m.product_id as product_id, pt.categ_id as product_categ_id, l.usage as location_type,
m.company_id,
m.state as state, m.prodlot_id as prodlot_id,
- coalesce(sum(-pt.standard_price * m.product_qty)::decimal, 0.0) as value,
- CASE when pt.uom_id = m.product_uom THEN
- coalesce(sum(-m.product_qty)::decimal, 0.0)
- ELSE
- coalesce(sum(-m.product_qty * pu.factor)::decimal, 0.0) END as product_qty
+
+ coalesce(sum(-pt.standard_price * m.product_qty * pu.factor / pu2.factor)::decimal, 0.0) as value,
+ coalesce(sum(-m.product_qty * pu.factor / pu2.factor)::decimal, 0.0) as product_qty
FROM
stock_move m
LEFT JOIN stock_picking p ON (m.picking_id=p.id)
LEFT JOIN product_product pp ON (m.product_id=pp.id)
LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
LEFT JOIN product_uom pu ON (pt.uom_id=pu.id)
+ LEFT JOIN product_uom pu2 ON (m.product_uom=pu2.id)
LEFT JOIN product_uom u ON (m.product_uom=u.id)
LEFT JOIN stock_location l ON (m.location_id=l.id)
GROUP BY
@@ -199,17 +199,15 @@ CREATE OR REPLACE view report_stock_inventory AS (
m.product_id as product_id, pt.categ_id as product_categ_id, l.usage as location_type,
m.company_id,
m.state as state, m.prodlot_id as prodlot_id,
- coalesce(sum(pt.standard_price * m.product_qty )::decimal, 0.0) as value,
- CASE when pt.uom_id = m.product_uom THEN
- coalesce(sum(m.product_qty)::decimal, 0.0)
- ELSE
- coalesce(sum(m.product_qty * pu.factor)::decimal, 0.0) END as product_qty
+ coalesce(sum(pt.standard_price * m.product_qty * pu.factor / pu2.factor)::decimal, 0.0) as value,
+ coalesce(sum(m.product_qty * pu.factor / pu2.factor)::decimal, 0.0) as product_qty
FROM
stock_move m
LEFT JOIN stock_picking p ON (m.picking_id=p.id)
LEFT JOIN product_product pp ON (m.product_id=pp.id)
LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
LEFT JOIN product_uom pu ON (pt.uom_id=pu.id)
+ LEFT JOIN product_uom pu2 ON (m.product_uom=pu2.id)
LEFT JOIN product_uom u ON (m.product_uom=u.id)
LEFT JOIN stock_location l ON (m.location_dest_id=l.id)
GROUP BY
diff --git a/addons/stock/report/ups.py b/addons/stock/report/ups.py
deleted file mode 100644
index fb8483341ec..00000000000
--- a/addons/stock/report/ups.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from report.interface import report_rml
-
-class report_custom(report_rml):
- def create(self, uid, ids, datas, context):
- datas.setdefault('form', {})
- datas['form'].setdefault('weight', 3.0)
-
- datas['model'] = 'stock.move.lot'
- datas['ids'] = ids
- del datas['id']
-
- return (super(report_custom, self).create(uid, ids, datas, context), 'pdf')
-
-report_custom('report.stock.move.lot.ups_xml', 'stock.move.lot', 'addons/stock/report/UPS.xml', None)
-
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 283b9247b63..2dbfc5105c1 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -622,8 +622,8 @@ class stock_picking(osv.osv):
'location_dest_id': fields.many2one('stock.location', 'Dest. Location',help="Location where the system will stock the finished products.", select=True),
'move_type': fields.selection([('direct', 'Partial Delivery'), ('one', 'All at once')], 'Delivery Method', required=True, help="It specifies goods to be delivered all at once or by direct delivery"),
'state': fields.selection([
- ('draft', 'Draft'),
- ('auto', 'Waiting'),
+ ('draft', 'New'),
+ ('auto', 'Waiting Another Operation'),
('confirmed', 'Waiting Availability'),
('assigned', 'Ready to Process'),
('done', 'Done'),
@@ -848,7 +848,11 @@ class stock_picking(osv.osv):
for pick in self.browse(cr, uid, ids, context=context):
todo = []
for move in pick.move_lines:
- if move.state == 'assigned':
+ if move.state == 'draft':
+ self.pool.get('stock.move').action_confirm(cr, uid, [move.id],
+ context=context)
+ todo.append(move.id)
+ elif move.state in ('assigned','confirmed'):
todo.append(move.id)
if len(todo):
self.pool.get('stock.move').action_done(cr, uid, todo,
@@ -1528,13 +1532,13 @@ class stock_move(osv.osv):
'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product UoM'), required=True,states={'done': [('readonly', True)]}),
'product_uom': fields.many2one('product.uom', 'Unit of Measure', required=True,states={'done': [('readonly', True)]}),
- 'product_uos_qty': fields.float('Quantity (UOS)', digits_compute=dp.get_precision('Product UoM')),
- 'product_uos': fields.many2one('product.uom', 'Product UOS'),
+ 'product_uos_qty': fields.float('Quantity (UOS)', digits_compute=dp.get_precision('Product UoM'), states={'done': [('readonly', True)]}),
+ 'product_uos': fields.many2one('product.uom', 'Product UOS', states={'done': [('readonly', True)]}),
'product_packaging': fields.many2one('product.packaging', 'Packaging', help="It specifies attributes of packaging like type, quantity of packaging,etc."),
'location_id': fields.many2one('stock.location', 'Source Location', required=True, select=True,states={'done': [('readonly', True)]}, help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
'location_dest_id': fields.many2one('stock.location', 'Destination Location', required=True,states={'done': [('readonly', True)]}, select=True, help="Location where the system will stock the finished products."),
- 'address_id': fields.many2one('res.partner.address', 'Destination Address', help="Optional address where goods are to be delivered, specifically used for allotment"),
+ 'address_id': fields.many2one('res.partner.address', 'Destination Address ', states={'done': [('readonly', True)]}, help="Optional address where goods are to be delivered, specifically used for allotment"),
'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', states={'done': [('readonly', True)]}, help="Production lot is used to put a serial number on the production", select=True),
'tracking_id': fields.many2one('stock.tracking', 'Pack', select=True, states={'done': [('readonly', True)]}, help="Logistical shipping unit: pallet, box, pack ..."),
@@ -1546,7 +1550,7 @@ class stock_move(osv.osv):
'move_history_ids2': fields.many2many('stock.move', 'stock_move_history_ids', 'child_id', 'parent_id', 'Move History (parent moves)'),
'picking_id': fields.many2one('stock.picking', 'Reference', select=True,states={'done': [('readonly', True)]}),
'note': fields.text('Notes'),
- 'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Not Available'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
+ 'state': fields.selection([('draft', 'New'), ('waiting', 'Waiting Another Move'), ('confirmed', 'Waiting Availability'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
help='When the stock move is created it is in the \'Draft\' state.\n After that, it is set to \'Not Available\' state if the scheduler did not find the products.\n When products are reserved it is set to \'Available\'.\n When the picking is done the state is \'Done\'.\
\nThe state is \'Waiting\' if the move is waiting for another one.'),
'price_unit': fields.float('Unit Price', digits_compute= dp.get_precision('Account'), help="Technical field used to record the product cost set by the user during a picking confirmation (when average price costing method is used)"),
@@ -2239,6 +2243,7 @@ class stock_move(osv.osv):
return super(stock_move, self).unlink(
cr, uid, ids, context=ctx)
+ # _create_lot function is not used anywhere
def _create_lot(self, cr, uid, ids, product_id, prefix=False):
""" Creates production lot
@return: Production lot id
@@ -2284,6 +2289,7 @@ class stock_move(osv.osv):
self.action_done(cr, uid, res)
return res
+ # action_split function is not used anywhere
def action_split(self, cr, uid, ids, quantity, split_by_qty=1, prefix=False, with_lot=True, context=None):
""" Split Stock Move lines into production lot which specified split by quantity.
@param cr: the database cursor
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 6a6566d8bf9..49cd4d2d10d 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -799,7 +799,7 @@
-
+
@@ -990,7 +990,7 @@
-
+
@@ -1210,7 +1210,7 @@
-
+
@@ -1467,7 +1467,7 @@
-
+
@@ -1486,11 +1486,11 @@
-
-
-
-
+
+
+
+
@@ -1525,7 +1525,7 @@
form
- {'search_default_Available':1}
+ {'search_default_ready':1}This menu gives you the full traceability of inventory operations on a specific product. You can filter on the product to see all the past or future movements for the product.
@@ -1675,10 +1675,10 @@
-
+
+
-
-
+
@@ -1707,12 +1707,12 @@
-
-
+
+
@@ -1945,5 +1945,9 @@
groups="base.group_extended"
parent="menu_warehouse_config" />
+
+ Stock Management
+
+
diff --git a/addons/stock/stock_workflow.xml b/addons/stock/stock_workflow.xml
index 7a1f786ebf8..d54c8b83d11 100644
--- a/addons/stock/stock_workflow.xml
+++ b/addons/stock/stock_workflow.xml
@@ -37,13 +37,6 @@
action_done()True
-
-
- cancel
- True
- function
- action_cancel()
-
@@ -121,11 +114,6 @@
test_cancel()
-
-
-
- button_cancel
-
diff --git a/addons/stock/test/stock_test.yml b/addons/stock/test/stock_test.yml
index 6a82846492d..ebd3c6670b4 100644
--- a/addons/stock/test/stock_test.yml
+++ b/addons/stock/test/stock_test.yml
@@ -2,179 +2,103 @@
-
In order to test the stock module, I will create product,
create physical inventory ,fill inventory lines from location,split inventory line into production lot
+-
+ I create Stock Production Lot for product PC3
+-
+ !record {model: stock.production.lot, id: stock_production_lot0}:
+ product_id: product.product_product_pc3
+ date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
+ name: 0000001
+-
+ I trace the Stock Production Lot for product PC3.
+-
+ !python {model: stock.production.lot }: |
+ self.action_traceability(cr,uid,[ref('stock_production_lot0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
-
-
- I create Receivable Account .
+ I create change product quantity for product PC3.
-
- !record {model: account.account, id: account_account_receivable0}:
- code: '40000-stock-test'
- company_id: base.main_company
- currency_mode: current
- name: Receivable
- parent_left: 1
- parent_right: 2
- type: receivable
- user_type: account.account_type_receivable
--
- I create Payable Account.
--
- !record {model: account.account, id: account_account_payable0}:
- code: '440000-stock-test'
- company_id: base.main_company
- currency_mode: current
- name: Payable
- parent_left: 3
- parent_right: 4
- type: payable
- user_type: account.account_type_payable
--
- I create Purchase Journal - (test).
--
- !record {model: account.journal, id: account_journal_purchasejournal0}:
- code: pur
- company_id: base.main_company
- name: Purchase Journal - (test)
- sequence_id: account.sequence_purchase_journal
- type: purchase
- view_id: account.account_journal_bank_view
+ !record {model: stock.change.product.qty, id: stock_change_product_qty0}:
+ product_id: product.product_product_pc3
+ new_quantity: 100
+ location_id: stock.stock_location_stock
+ prodlot_id: stock.stock_production_lot0
-
- I create Sale Journal.
+ I apply the new quantity on product PC3.
-
- !record {model: account.journal, id: account_journal_salejouran0}:
- code: sal
- company_id: base.main_company
- name: Sale Journal
- sequence_id: account.sequence_sale_journal
- type: sale
- view_id: account.account_journal_view
+ !python {model: stock.change.product.qty }: |
+ context = {"lang": 'en_US', "active_model":
+ "product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
+ self.default_get(cr, uid, ["prodlot_id", "location_id", "new_quantity", "product_id"], context)
+ self.fields_view_get(cr, uid, ref("stock.view_change_product_quantity"),"form", context)
+ self.change_product_qty(cr, uid, [ref("stock_change_product_qty0")], {"lang": 'en_US', "active_model":
+ "stock.change.product.qty", "active_ids": ref("product.product_product_pc3"), "tz": False, "active_id":ref('product.product_product_pc3')})
-
- I create Expense Account.
+ I check that the quantity on product PC3 is updated.
-
- !record {model: account.account, id: account_account_expenseaccount0}:
- code: Expe
- company_id: base.main_company
- currency_mode: current
- name: Expense Account
- parent_left: 5
- parent_right: 6
- type: consolidation
- user_type: account.account_type_expense
--
- I create Product Sale Account.
--
- !record {model: account.account, id: account_account_productsale0}:
- code: '001-stock-test'
- company_id: base.main_company
- currency_mode: current
- name: Product Sale
- type: other
- user_type: account.account_type_income
-
+ !python {model: product.product }: |
+ pro_obj = self.browse(cr, uid, ref("product.product_product_pc3"))
+ assert (pro_obj.qty_available >= 100) , "The quantity of PC3 is not updated!"
-
- I create Product Purchase Account.
+ I Read quantity on product PC3.
-
- !record {model: account.account, id: account_account_productpurchase0}:
- code: '0002-stock-test'
- company_id: base.main_company
- currency_mode: current
- name: Product Purchase
- type: other
- user_type: account.account_type_expense
+ !python {model: stock.location }: |
+ self.read(cr, uid, [ref("stock.stock_location_stock")],['stock_real_value','stock_virtual'], {'lang': 'en_GB', 'tz': False, 'active_model': 'product.product', 'bin_size': True, 'active_ids': [ref("product.product_product_pc3")], 'product_id':ref("product.product_product_pc3"), 'active_id': ref("product.product_product_pc3")})
+
+-
+ I Creating a chained stock.location record
+-
+ !record {model: stock.location, id: stock_location_loc0}:
+ chained_auto_packing: auto
+ chained_delay: 0.0
+ chained_location_id: stock.stock_location_customers
+ chained_location_type: fixed
+ location_id: stock.stock_location_company
+ name: chain location
+ parent_left: 2
+ parent_right: 3
+ usage: internal
-
- I create partner.
+ I create Product By location chart for stock.location.product Object.
-
- !record {model: res.partner, id: res_partner_shawtrust0}:
- address:
- - country_id: base.in
- - street: St James House, Vicar Lane, Sheffield
- lang: en_US
- name: 'Shaw Trust '
- property_account_payable: account_account_payable0
- property_account_receivable: account_account_receivable0
--
- I create partner.
--
- !record {model: res.partner, id: res_partner_diasorinltd0}:
- address:
- - country_id: base.in
- street: Ash House, Ash Road
- name: DiaSorin Ltd
- supplier: true
-
+ !record {model: stock.location.product, id: stock_location_product0}:
+ from_date: '2011-07-01 00:00:00'
+ to_date: '2011-07-31 23:59:00'
-
- I create partner.
+ I open product chart.
-
- !record {model: res.partner, id: res_partner_microlinktechnologies0}:
- address:
- - street: Kailash Vaibhav, Parksite
- name: Micro Link Technologies
- property_account_payable: account_account_payable0
- property_account_receivable: account_account_receivable0
- supplier: true
+ !python {model: stock.location.product }: |
+ self.action_open_window(cr, uid, [ref("stock_location_product0")], {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
-
- I create partner address.
+ I open product form from stock.location object .
-
- !record {model: res.partner.address, id: res_partner_address_0}:
- country_id: base.in
- partner_id: stock.res_partner_diasorinltd0
- street: Ash House, Ash Road
- title: base.res_partner_title_miss
-
+ !python {model: product.product }: |
+ self.fields_view_get(cr, uid, False, "tree", {'lang': 'en_US', 'full': 1, 'tz': False, 'active_model': 'stock.location', 'location': ref('stock.stock_location_stock'), 'search_default_in_location': 1, 'active_ids': [ref("stock.stock_location_stock")], 'active_id': ref("stock.stock_location_stock")})
-
- I create product.category .
+ I create change product standard price for product PC3.
-
- !record {model: product.category, id: product_category_computer0}:
- name: Computer
+ !record {model: stock.change.standard.price, id: stock_change_standard_price0}:
+ new_price: 1515
+ stock_account_input: account.a_recv
+ stock_account_output: account.a_pay
+ stock_journal: account.expenses_journal
+ enable_stock_in_out_acc: True
-
- I create product HP Pavilion Desktop PCs .
+ I apply the new product standard price on product PC3.
-
- !record {model: product.product, id: product_product_hppaviliondesktoppcs0}:
- categ_id: stock.product_category_computer0
- cost_method: standard
- mes_type: fixed
- list_price: 1000.0
- name: HP Pavilion Desktop PCs
- procure_method: make_to_stock
- seller_ids:
- - delay: 1
- name: stock.res_partner_shawtrust0
- min_qty: 5.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
- property_account_expense: account_account_productsale0
- property_account_income: account_account_productsale0
-
--
- I create product HP CD writers.
--
- !record {model: product.product, id: product_product_hpcdwriters0}:
- categ_id: stock.product_category_computer0
- cost_method: standard
- list_price: 1000.0
- mes_type: fixed
- name: HP CD writers
- procure_method: make_to_stock
- seller_ids:
- - delay: 1
- name: res_partner_shawtrust0
- min_qty: 5.0
- supply_method: buy
- type: product
- uom_id: product.product_uom_unit
- uom_po_id: product.product_uom_unit
- property_account_expense: account_account_productpurchase0
- property_account_income: account_account_productsale0
+ !python {model: stock.change.standard.price }: |
+ context = {"lang": 'en_US', "active_model":
+ "product.product", "active_ids": [ref("product.product_product_pc3")], "tz": False, "active_id":ref('product.product_product_pc3')}
+ self.default_get(cr, uid, ["new_price"], context)
+ self.change_price(cr, uid, [ref("stock_change_product_qty0")], context)
-
I create Physical Inventory for the products.
@@ -182,64 +106,128 @@
!record {model: stock.inventory, id: stock_inventory_physicalinventoy0}:
company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- date_done: !eval time.strftime('%Y-%m-%d %H:%M:%S')
inventory_line_id:
- company_id: base.main_company
location_id: stock.stock_location_stock
- product_id: stock.product_product_hpcdwriters0
+ product_id: product.product_product_pc3
product_qty: 10.0
product_uom: product.product_uom_unit
- company_id: base.main_company
location_id: stock.stock_location_stock
- product_id: stock.product_product_hppaviliondesktoppcs0
+ product_id: product.product_product_pc1
product_qty: 10.0
product_uom: product.product_uom_unit
name: Physical inventory
state: draft
+-
+ I create merge Inventory for the products.
+-
+ !record {model: stock.inventory, id: stock_inventory_mergeinventoy0}:
+ company_id: base.main_company
+ date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
+ inventory_line_id:
+ - company_id: base.main_company
+ location_id: stock.stock_location_stock
+ product_id: product.product_product_pc3
+ product_qty: 20.0
+ product_uom: product.product_uom_unit
+ - company_id: base.main_company
+ location_id: stock.stock_location_stock
+ product_id: product.product_product_pc1
+ product_qty: 20.0
+ product_uom: product.product_uom_unit
+ name: Physical inventory
+ state: draft
-
- I confirm the Inventory for HP CD writers.
+ I merge inventory .
-
- !python {model: stock.inventory}: |
- self.action_confirm(cr,uid,[ref('stock_inventory_physicalinventoy0')])
- self.action_done(cr,uid,[ref('stock_inventory_physicalinventoy0')])
+ !python {model: stock.inventory.merge}: |
+ context = {"lang": 'en_US',
+ "full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
+ [ref("stock_inventory_physicalinventoy0"), ref("stock_inventory_mergeinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0"), }
+ self.fields_view_get(cr, uid, False, "form", context)
+ self.do_merge(cr, uid, [ref("stock_inventory_mergeinventoy0")], context)
+
+-
+ I create stock.inventory.line record.
+-
+ !record {model: stock.inventory.line, id: stock_inventory_line}:
+ product_id: product.product_product_pc1
+ product_uom: product.product_uom_unit
+ product_qty: 10
+ inventory_id: stock_inventory_mergeinventoy0
+ location_id: stock.stock_location_stock
+
+-
+ I Change a Product oF stock.inventory.line record.
+-
+ !python {model: stock.inventory.line}: |
+ self.on_change_product_id(cr, uid, [ref("stock_inventory_line")], ref('stock.stock_location_stock'), ref('product.product_product_pc3'), False, False)
+
-
I create stock.fill.inventory .
-
!record {model: stock.fill.inventory, id: stock_fill_inventory_0}:
location_id: stock.stock_location_stock
+ recursive: False
+ set_stock_zero: False
-
- I fill inventory for HP CD writers.
+ I fill inventory for PC3.
-
!python {model: stock.fill.inventory}: |
- self.fill_inventory(cr, uid, [ref("stock_fill_inventory_0")], {"lang": 'en_US',
- "full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
- [ref("stock_inventory_physicalinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0"), })
+ context = {"lang": 'en_US',"full": "1", "tz": False, "active_model": "stock.inventory", "active_ids":
+ [ref("stock_inventory_physicalinventoy0")], "active_id": ref("stock_inventory_physicalinventoy0")}
+ self.view_init(cr, uid, ["set_stock_zero", "location_id", "recursive"], context)
+ self.fill_inventory(cr, uid, [ref("stock_fill_inventory_0")], context)
-
- I create stock.move.split record.
+ I create stock.inventory.line.split record.
-
- !record {model: stock.move.split, id: stock_move_split_0}:
+ !record {model: stock.inventory.line.split, id: stock_inventory_line_0}:
line_ids:
- - name: '00001-stock-test'
+ - name: '00002-stock-test'
quantity: 5
- product_id: stock.product_product_hpcdwriters0
+ line_exist_ids:
+ - name: '00003-stock-test'
+ quantity: 5
+ product_id: product.product_product_pc1
+ product_uom: product.product_uom_unit
+ use_exist: False
+ qty: 10
-
- I Split into production line.
--
- !python {model: stock.move.split}: |
- move_obj=self.pool.get('stock.move')
- product_obj=self.pool.get('product.product')
- product_id=product_obj.search(cr,uid,[('name','=','HP CD writers')])
- move_ids=move_obj.search(cr,uid,[('product_id','in',product_id)])
- self.split_lot(cr, uid, [ref("stock_move_split_0")], {"lang": 'en_US', "active_model":
- "stock.move", "active_ids": move_ids, "tz": False, "active_id":move_ids[0]
- })
+ I Split stock.inventory.line into production line.
-
+ !python {model: stock.inventory.line.split}: |
+ context = {"lang": 'en_US', "active_model": "stock.inventory.line",
+ "active_ids": [ref("stock_inventory_line_0")], "tz": False, "active_id": ref("stock_inventory_line_0")}
+ self.default_get(cr, uid, ["product_id", "product_uom", "line_exist_ids", "qty",
+ "line_ids", "use_exist"], context)
+ self.split_lot(cr, uid, [ref("stock_inventory_line_0")], context)
+-
+ I confirm the Inventory for PC3.
+-
+ !python {model: stock.inventory}: |
+ self.action_confirm(cr,uid,[ref('stock_inventory_physicalinventoy0')])
+ self.action_done(cr,uid,[ref('stock_inventory_physicalinventoy0')])
+
+-
+ I cancel the Inventory for PC3.
+-
+ !python {model: stock.inventory}: |
+ self.action_cancel_inventary(cr,uid,[ref('stock_inventory_physicalinventoy0')])
+
+-
+ I change inventory state to draft for PC3.
+-
+ !python {model: stock.inventory}: |
+ self.action_cancel_draft(cr,uid,[ref('stock_inventory_physicalinventoy0')])
+
+-
In Order to test the picking I create picking with move lines.
-
!record {model: stock.picking, id: stock_picking_0}:
@@ -247,21 +235,36 @@
address_id: base.res_partner_address_4
company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- invoice_state: none
+ invoice_state: 2binvoiced
move_lines:
- company_id: base.main_company
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- location_dest_id: stock.stock_location_customers
+ location_dest_id: stock.stock_location_loc0
location_id: stock.stock_location_stock
- name: HP CD writers
- product_id: product.product_product_pc1
- product_qty: 3.0
+ name: PC3
+ product_id: product.product_product_pc3
+ product_qty: 100.0
product_uom: product.product_uom_unit
date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
- product_uos_qty: 3.0
+ product_uos_qty: 100.0
move_type: direct
- type: internal
+ type: out
+-
+ I Performing an osv_memory action split on module stock.split.into
+-
+ !python {model: stock.picking }: |
+ pick=self.browse(cr,uid,ref('stock_picking_0'))
+ split_obj=self.pool.get('stock.split.into')
+ partial_datas={}
+ move=pick.move_lines[0]
+ partial_datas= {
+ 'quantity': 20,
+ }
+ split_id = self.pool.get('stock.split.into').create(cr, uid, partial_datas)
+ split_obj.split(cr, uid, [split_id], {"lang": "en_US", "tz":
+ False, "active_model": "stock.move", "active_ids": [move.id],
+ "active_id": move.id, })
-
I click on draft_force_assign on picking.
@@ -272,31 +275,207 @@
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
ref("stock.menu_action_picking_tree6"), })
-
-
- I click on force_assign on picking.
+ I click on action_assign on picking.
-
!python {model: stock.picking}: |
- self.force_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
+ self.action_assign(cr, uid, [ref("stock_picking_0")], {"lang": "en_US", "active_model":
"ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
"partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
ref("stock.menu_action_picking_tree6"), })
-
- I confirm the picking.
+ I create a record for stock.partial.move.
+-
+ !record {model: stock.partial.move, id: stock_partial_move_0}:
+ date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
+
+-
+ I done stock.partial.move record.
+-
+ !python {model: stock.partial.move }: |
+ pick_obj = self.pool.get('stock.picking')
+ move_obj = self.pool.get('stock.move')
+ pick=pick_obj.browse(cr,uid,ref('stock_picking_0'))
+ search_id = move_obj.search(cr, uid, [('picking_id', '=', pick.id)])
+ partial_datas={}
+ for move in pick.move_lines:
+ partial_datas['move%s'%(move.id)]= {
+ 'quantity': 20,
+ 'product_uom': move.product_uom.id,
+ 'prodlot_id': move.prodlot_id and move.prodlot_id.id or False,
+ 'wizard_id': ref('stock_partial_move_0'),
+ }
+ context = {"lang": 'en_US', "active_model": "stock.move", "active_ids": search_id, "tz": False, "active_id":search_id[0]}
+ self.fields_view_get(cr, uid, False,"form", context)
+ self.do_partial(cr, uid, [ref('stock_partial_move_0')], context)
+
+-
+ I Performing an osv_memory action split_lot on module stock.move.split
+-
+
+ !python {model: stock.picking }: |
+ split_obj=self.pool.get('stock.move.split')
+ split_move_lines=self.pool.get('stock.move.split.lines')
+ pick=self.browse(cr,uid,ref('stock_picking_0'))
+ partial_datas={}
+ move=pick.move_lines[0]
+ partial_datas= {
+ 'product_id': move.product_id.id,
+ 'qty': 80,
+ 'product_uom': move.product_uom.id,
+ 'use_exist': move.picking_id and move.picking_id.type=='out' and True or False
+ }
+ split_id = self.pool.get('stock.move.split').create(cr, uid, partial_datas, context={})
+ split_move_data= {
+ 'lot_id': split_id,
+ 'quantity': 10,
+ 'name': 'lot',
+ }
+ split_move_id = split_move_lines.create(cr, uid, split_move_data, context={})
+ split_obj.default_get(cr, uid, ["product_id", "product_uom", "line_exist_ids", "qty",
+ "line_ids", "use_exist"], {'lang': 'en_US', 'default_location_dest_id': ref('stock.stock_location_stock'), 'tz': False, 'active_model': 'stock.move', 'search_default_receive': 1, 'product_receive': True, 'active_ids': [move.id], 'default_location_id': ref('stock.stock_location_locations'), 'active_id': move.id})
+ split_obj.split_lot(cr, uid, [split_id], context={"lang": "en_US", "tz":
+ False, "active_model": "stock.move", "scrap": True, "active_ids": [move.id],
+ "active_id": move.id, })
+
+-
+ I Performed an osv_memory action move_scrap on module stock.move.scrap
-
!python {model: stock.picking }: |
- import time
- pick=self.browse(cr,uid,ref('stock_picking_0'))
- move =pick.move_lines[0]
- partial_datas = {
- 'partner_id':pick.address_id.partner_id.id,
- 'address_id': pick.address_id.id,
- 'delivery_date' : time.strftime('%Y-%m-%d')
- }
- partial_datas['move%s'%(move.id)]= {
- 'product_id': move.product_id,
- 'product_qty': move.product_qty,
+ location_obj = self.pool.get('stock.location')
+ scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
+ pick=self.browse(cr,uid,ref('stock_picking_0'))
+ scrap_obj=self.pool.get('stock.move.scrap')
+ partial_datas={}
+ move=pick.move_lines[0]
+ partial_datas= {
+ 'product_id': move.product_id.id,
+ 'location_id': scrpaed_location_ids[0],
+ 'product_qty': 1,
'product_uom': move.product_uom.id,
}
- self.do_partial(cr, uid, [ref('stock_picking_0')],partial_datas)
+ scrap_id = scrap_obj.create(cr, uid, partial_datas)
+ context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
+ "scrap": True, "active_ids": [move.id], "active_id": move.id, }
+ scrap_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
+ scrap_obj.move_scrap(cr, uid, [scrap_id], context)
+
+-
+ I Performed an osv_memory do move consume on module stock.move.consume
+-
+ !python {model: stock.picking }: |
+ location_obj = self.pool.get('stock.location')
+ scrpaed_location_ids = location_obj.search(cr, uid, [('scrap_location','=',True)])
+ pick=self.browse(cr,uid,ref('stock_picking_0'))
+ consume_obj=self.pool.get('stock.move.consume')
+ partial_datas={}
+ move=pick.move_lines[0]
+ partial_datas= {
+ 'product_id': move.product_id.id,
+ 'location_id': scrpaed_location_ids[0],
+ 'product_qty': 1,
+ 'product_uom': move.product_uom.id,
+ }
+ context = {"lang": "en_US", "tz": False, "active_model": "stock.move",
+ "scrap": True, "active_ids": [move.id], "active_id": move.id, }
+ consume_id = consume_obj.create(cr, uid, partial_datas)
+ consume_obj.default_get(cr, uid, ["location_id", "product_id", "product_uom", "product_qty"], context)
+ consume_obj.do_move_consume(cr, uid, [consume_id], context)
+
+-
+ I create a record for stock partial picking.
+-
+ !record {model: stock.partial.picking, id: stock_partial_picking_0}:
+ date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
+
+-
+ I make stock partial picking order Done.
+-
+ !python {model: stock.partial.picking}: |
+ pick_obj = self.pool.get('stock.picking')
+ partial = self.browse(cr, uid, ref('stock_partial_picking_0'), context)
+ partial_datas = {
+ 'delivery_date' : partial.date
+ }
+ for pick in pick_obj.browse(cr, uid, [ref('stock_picking_0')]):
+ for m in pick.move_lines:
+ partial_datas['move%s'%(m.id)] = {
+ 'product_id' : m.product_id.id,
+ 'product_qty' : 80,
+ 'product_uom' : m.product_uom.id
+ }
+ context = {"lang": "en_US", "search_default_available":
+ 1, "tz": False, "active_model": "ir.ui.menu",
+ "active_ids": [ref('stock_picking_0')], "active_id": ref("stock_picking_0"),
+ }
+ self.fields_view_get(cr, uid, False,"form", context)
+ self.do_partial(cr, uid, [ref('stock_partial_picking_0')], context)
+
+-
+ I Performing an osv_memory action create_invoice on module stock.invoice.onshipping
+-
+ !python {model: stock.invoice.onshipping}: |
+ invoice_line_id = self.create(cr, uid,{}, {"lang": 'en_US', "active_model":
+ "stock.picking", "active_ids": [ref("stock_picking_0")], "tz": False, "active_id":ref("stock_picking_0")})
+ self.open_invoice(cr, uid, [invoice_line_id], {"lang": "en_US",
+ "search_default_available": 1, "inv_type": "in_invoice" , "tz": False, "active_model": "stock.picking",
+ "contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
+ "active_id": ref("stock_picking_0")})
+ self._get_journal_id(cr, uid, {"lang": "en_US", "search_default_available": 1, "tz": False, "active_model": "stock.picking",
+ "contact_display": "partner_address", "active_ids": [ref("stock_picking_0")],
+ "active_id": ref("stock_picking_0"), })
+
+-
+ I create a record of stock.picking and unlink a record
+-
+ !python {model: stock.picking}: |
+ copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
+ ctx = {"lang": "en_US", "active_model":
+ "ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
+ "partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
+ ref("stock.menu_action_picking_tree6"), }
+ self.draft_force_assign(cr, uid, [copy_id], ctx)
+ self.unlink(cr, uid, [copy_id], ctx)
+
+-
+ I create a record of stock.picking and cancel a record
+-
+ !python {model: stock.picking}: |
+ copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
+ self.draft_validate(cr, uid, [copy_id], {"lang": "en_US", "search_default_available":
+ 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner_address",
+ "active_ids": [ref("stock.menu_action_picking_tree4")], "active_id": ref("stock.menu_action_picking_tree4"),
+ })
+ pick=self.browse(cr,uid,copy_id)
+ self.allow_cancel(cr, uid, [copy_id], context= None)
+
+-
+ I create a record of stock.picking and I reaturn the picking
+-
+ !python {model: stock.picking}: |
+ copy_id = self.copy(cr, uid, (ref("stock_picking_0")))
+ ctx = {"lang": "en_US", "active_model":
+ "ir.ui.menu", "tz": False, "search_default_confirmed": 1, "contact_display":
+ "partner", "active_ids": [ref("stock.menu_action_picking_tree6")], "active_id":
+ ref("stock.menu_action_picking_tree6")}
+ self.draft_force_assign(cr, uid, [copy_id], ctx)
+ self.force_assign(cr, uid, [copy_id], ctx)
+ pick=self.browse(cr,uid,copy_id)
+ partial_datas={}
+ for move in pick.move_lines:
+ partial_datas['move%s'%(move.id)]= {
+ 'product_id': move.product_id,
+ 'product_qty': move.product_qty,
+ }
+ self.do_partial(cr, uid, [pick.id],partial_datas)
+ reurn_datas={}
+ context = {"lang": 'en_US', "active_model":
+ "stock.picking", "active_ids": [pick.id], "tz": False, "active_id":pick.id}
+ return_pick_id = self.pool.get('stock.return.picking').create(cr, uid,{}, context)
+ for move in pick.move_lines:
+ reurn_datas= {
+ 'product_id': move.product_id.id,
+ 'quantity': move.product_qty,
+ }
+ self.pool.get('stock.return.picking').create_returns(cr, uid, [return_pick_id], context)
diff --git a/addons/stock/test/stock_test_wizard.yml b/addons/stock/test/stock_test_wizard.yml
new file mode 100644
index 00000000000..6c4d5ae12c2
--- /dev/null
+++ b/addons/stock/test/stock_test_wizard.yml
@@ -0,0 +1,78 @@
+
+-
+ I create stock.tracking record.
+-
+ !record {model: stock.tracking, id: stock_tracking_0}:
+ move_ids:
+ - product_id: product.product_product_pc1
+ product_qty: 5.0
+ product_uom: product.product_uom_unit
+ location_id : stock.stock_location_suppliers
+ location_dest_id: stock.stock_location_shop0
+ name : '[PC1] Basic PC'
+ date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
+ name: 0000007
+ active: True
+ date: !eval time.strftime('%Y-%m-%d %H:%M:%S')
+
+-
+ I trace the information of a product.
+-
+ !python {model: stock.tracking}: |
+ self.name_get(cr, uid, [ref('stock_tracking_0')],{'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
+ self.action_traceability(cr,uid,[ref('stock_tracking_0')], {'lang': 'en_US', 'tz': False, 'active_model': 'ir.ui.menu', 'field': '', 'type': ''})
+
+-
+ I creat stock.move Record
+-
+ !record {model: stock.move, id: stock_move_test0}:
+ location_dest_id: stock.stock_location_shop0
+ product_id: product.product_product_pc1
+ product_qty: 5.0
+ product_uom: product.product_uom_unit
+ date_expected : !eval time.strftime('%Y-%m-%d %H:%M:%S')
+ location_id : stock.stock_location_suppliers
+ name : '[PC1] Basic PC'
+ company_id: base.main_company
+ product_uos_qty : 5.0
+ name: IN/00010
+ state: assigned
+
+-
+ I Check onchange function of stock.move object
+-
+ !python {model: stock.move }: |
+ self.onchange_lot_id(cr, uid, [ref("stock_move_test0")], ref("stock.stock_production_lot0"), 5, ref("stock.stock_location_suppliers"), ref("product.product_product_pc1"), ref("product.product_uom_unit"), None)
+ self.onchange_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
+ self.onchange_uos_quantity(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), 10, ref("product.product_uom_unit"), ref("product.product_uom_unit"))
+ self.onchange_product_id(cr, uid, [ref("stock_move_test0")], ref("product.product_product_pc1"), ref("stock.stock_location_suppliers"), ref("stock.stock_location_shop0"), False)
+
+-
+ I Check _getSSCC and action_partial_move function of stock.move object
+-
+ !python {model: stock.move }: |
+ context = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
+ "stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")}
+ self._getSSCC(cr, uid , context)
+ self.action_partial_move(cr, uid , [ref("stock_move_test0")], context)
+
+-
+ I check write function
+-
+ !python {model: stock.move }: |
+ vals = {"product_qty" : 2, "product_uos_qty": 2}
+ self.write(cr, uid, [ref("stock_move_test0")], vals, {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
+ "ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_tree")], "tz": False, "active_id":ref("stock_move_tree")})
+
+-
+ I check default function
+-
+ !python {model: stock.move }: |
+ self.name_get(cr, uid, [ref("stock_move_test0")], {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
+ "stock.move", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("stock_move_test0")], "tz": False, "active_id":ref("stock_move_test0")})
+ ctx = {"lang": 'en_US', "default_location_dest_id": ref("stock.stock_location_shop0"), "active_model":
+ "ir.ui.menu", "search_default_receive": 1, 'product_receive': True, "default_location_id": ref("stock.stock_location_suppliers"),"active_ids":[ref("view_move_form_reception_picking")], "tz": False, "active_id":ref("view_move_form_reception_picking")}
+ self._default_location_destination(cr, uid, ctx)
+ self._default_location_source(cr, uid, ctx)
+
+
diff --git a/addons/stock/wizard/__init__.py b/addons/stock/wizard/__init__.py
index b903f020f82..e37483bfb37 100644
--- a/addons/stock/wizard/__init__.py
+++ b/addons/stock/wizard/__init__.py
@@ -24,8 +24,6 @@ import stock_move
import stock_splitinto
import stock_partial_picking
import stock_partial_move
-import stock_replacement
-import stock_ups
import stock_inventory_merge
import stock_fill_inventory
import stock_inventory_line_split
diff --git a/addons/stock/wizard/stock_change_standard_price.py b/addons/stock/wizard/stock_change_standard_price.py
index d6b7355bb7c..fa36559dddc 100644
--- a/addons/stock/wizard/stock_change_standard_price.py
+++ b/addons/stock/wizard/stock_change_standard_price.py
@@ -69,6 +69,7 @@ class change_standard_price(osv.osv_memory):
return res
+ # onchange_price function is not used anywhere
def onchange_price(self, cr, uid, ids, new_price, context=None):
""" Sets stock input and output account according to the difference
of old price and new price.
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index 395758b121b..66256509c7b 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -44,7 +44,7 @@ class stock_invoice_onshipping(osv.osv_memory):
res_ids = context and context.get('active_ids', [])
vals = []
browse_picking = model_pool.browse(cr, uid, res_ids, context=context)
-
+
for pick in browse_picking:
src_usage = pick.move_lines[0].location_id.usage
dest_usage = pick.move_lines[0].location_dest_id.usage
@@ -59,7 +59,7 @@ class stock_invoice_onshipping(osv.osv_memory):
journal_type = 'sale_refund'
else:
journal_type = 'sale'
-
+
value = journal_obj.search(cr, uid, [('type', '=',journal_type )])
for jr_type in journal_obj.browse(cr, uid, value, context=context):
t1 = jr_type.id,jr_type.name
@@ -135,10 +135,12 @@ class stock_invoice_onshipping(osv.osv_memory):
active_picking = picking_pool.browse(cr, uid, context.get('active_id',False), context=context)
inv_type = picking_pool._get_invoice_type(active_picking)
context['inv_type'] = inv_type
+ if isinstance(onshipdata_obj[0]['journal_id'], tuple):
+ onshipdata_obj[0]['journal_id'] = onshipdata_obj[0]['journal_id'][0]
res = picking_pool.action_invoice_create(cr, uid, active_ids,
journal_id = onshipdata_obj[0]['journal_id'],
group = onshipdata_obj[0]['group'],
- type = None,
+ type = inv_type,
context=context)
return res
diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py
index 42e2ba95acc..0e84997db85 100644
--- a/addons/stock/wizard/stock_move.py
+++ b/addons/stock/wizard/stock_move.py
@@ -23,35 +23,6 @@ from osv import fields, osv
import decimal_precision as dp
-class stock_move_track(osv.osv_memory):
- _name = "stock.move.track"
- _description = "Track moves"
-
- _columns = {
- 'tracking_prefix': fields.char('Tracking prefix', size=64),
- 'quantity': fields.float("Quantity per lot")
- }
-
- _defaults = {
- 'quantity': lambda *x: 1
- }
-
- def track_lines(self, cr, uid, ids, context=None):
- """ To track stock moves lines
- @param self: The object pointer.
- @param cr: A database cursor
- @param uid: ID of the user currently logged in
- @param ids: An ID or list of IDs if we want more than one
- @param context: A standard dictionary
- @return:
- """
- datas = self.read(cr, uid, ids)[0]
- move_obj = self.pool.get('stock.move')
- move_obj._track_lines(cr, uid, context['active_id'], datas, context=context)
- return {'type': 'ir.actions.act_window_close'}
-
-stock_move_track()
-
class stock_move_consume(osv.osv_memory):
_name = "stock.move.consume"
_description = "Consume Products"
diff --git a/addons/stock/wizard/stock_move_view.xml b/addons/stock/wizard/stock_move_view.xml
index 5f4bc1f71c5..3895f93ddc7 100644
--- a/addons/stock/wizard/stock_move_view.xml
+++ b/addons/stock/wizard/stock_move_view.xml
@@ -1,35 +1,6 @@
-
-
- Tracking a move
- stock.move.track
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tracking a move
- ir.actions.act_window
- stock.move.track
- form
- form
- new
-
-
-
diff --git a/addons/stock/wizard/stock_replacement.py b/addons/stock/wizard/stock_replacement.py
deleted file mode 100644
index 17f4d5a62ab..00000000000
--- a/addons/stock/wizard/stock_replacement.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-from tools.translate import _
-import time
-
-class stock_replacement(osv.osv_memory):
- """
- This class has been defined for replacement wizard
- """
- _name = "stock.replacement"
- _description = "Stock Replacement"
-
- def get_composant(self, cr, uid, ids, context=None):
- return {}
-
- def replace_composant(self, cr, uid, ids, context=None):
- """ To open a new wizard that acknowledge, a replacement task
- @return: It returns the replacement acknowledgement form
- """
- return {
- 'name': False,
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'stock.replacement.result',
- 'type': 'ir.actions.act_window',
- 'target':'new',
- }
-
-stock_replacement()
-
-class stock_replacement_result(osv.osv_memory):
- """
- This class has been defined for replacement result
- """
- _name = "stock.replacement.result"
- _description = "Stock Replacement result"
-
-stock_replacement_result()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/wizard/stock_replacement_view.xml b/addons/stock/wizard/stock_replacement_view.xml
deleted file mode 100644
index cea5bfedbe8..00000000000
--- a/addons/stock/wizard/stock_replacement_view.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
- Stock Replacement
- stock.replacement
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stock Replacement result
- stock.replacement.result
- form
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock/wizard/stock_ups.py b/addons/stock/wizard/stock_ups.py
deleted file mode 100644
index fb47587f254..00000000000
--- a/addons/stock/wizard/stock_ups.py
+++ /dev/null
@@ -1,95 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import netsvc
-from osv import fields, osv
-from tools.translate import _
-
-class stock_ups(osv.osv_memory):
- _name = "stock.ups"
- _description = "Stock ups"
-
- def ups_save(self, cr, uid, ids, context=None):
- return {
- 'name': False,
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'stock.ups.final',
- 'type': 'ir.actions.act_window',
- 'target':'new',
- }
-
- def ups_upload(self, cr, uid, ids, context=None):
- return {
- 'name': False,
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'stock.ups.upload',
- 'type': 'ir.actions.act_window',
- 'target':'new',
- }
-
- _columns = {
- 'weight': fields.float('Lot weight', required=True),
- }
-
- _defaults = {
- 'weight': lambda *a: 3.0,
- }
-stock_ups()
-
-class stock_ups_final(osv.osv_memory):
- _name = "stock.ups.final"
- _description = "Stock ups final"
-
- def create_xmlfile(self, cr, uid, ids, context=None):
- """ Creates xml report file.
- @return: xml file
- """
- data={}
- report = netsvc._group['report']['report.stock.move.lot.ups_xml']
- data['report_type'] = 'raw'
- return {'xmlfile' : report.create(uid, context['active_id'], ids, {})}
-
- _columns = {
- 'xmlfile': fields.binary('XML File'),
- }
-
-stock_ups_final()
-
-class stock_ups_upload(osv.osv_memory):
- _name = "stock.ups.upload"
- _description = "Stock ups upload"
-
- def upload_xmlfile(self, cr, uid, ids, context=None):
- """ Uploads xml report file.
- @return:
- """
- data={}
- report = netsvc._group['report']['report.stock.move.lot.ups_xml']
- data['report_type'] = 'raw'
- fp = file('/tmp/test.xml', 'w').write(report.create(uid, context['active_id'], ids, {}))
- return {'type': 'ir.actions.act_window_close'}
-
-stock_ups_upload()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/wizard/stock_ups_view.xml b/addons/stock/wizard/stock_ups_view.xml
deleted file mode 100644
index cbce721e1b9..00000000000
--- a/addons/stock/wizard/stock_ups_view.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
- Stock ups
- stock.ups
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stock ups
- stock.ups.final
- form
-
-
-
-
-
-
-
-
-
-
-
- Stock ups
- stock.ups.upload
- form
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock_invoice_directly/test/stock_invoice_directly.yml b/addons/stock_invoice_directly/test/stock_invoice_directly.yml
index 6d70540b4d5..806792868d4 100644
--- a/addons/stock_invoice_directly/test/stock_invoice_directly.yml
+++ b/addons/stock_invoice_directly/test/stock_invoice_directly.yml
@@ -58,7 +58,10 @@
'product_qty' : m.product_qty,
'product_uom' : m.product_uom.id
}
- pick_obj.do_partial(cr, uid, [ref('stock_picking_out0')], partial_datas, context=context)
+ self.do_partial(cr, uid, [ref('stock_partial_picking_0')], {"lang": "en_US", "search_default_available":
+ 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner",
+ "active_ids": [ref('stock_picking_out0')], "active_id": ref("stock_picking_out0"),
+ })
-
As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order.
-
diff --git a/addons/stock_location/__openerp__.py b/addons/stock_location/__openerp__.py
index ba81a42de5a..d50bcc0cac4 100644
--- a/addons/stock_location/__openerp__.py
+++ b/addons/stock_location/__openerp__.py
@@ -96,8 +96,8 @@ You can use the demo data as follow:
],
'installable': True,
'test':[
-# 'test/stock_location_pull_flow.yml',
-# 'test/stock_location_push_flow.yml',
+ 'test/stock_location_pull_flow.yml',
+ 'test/stock_location_push_flow.yml',
],
'active': False,
'certificate': '0046505115101',
diff --git a/addons/stock_location/test/stock_location_pull_flow.yml b/addons/stock_location/test/stock_location_pull_flow.yml
index 557162c725d..dec830b2d77 100644
--- a/addons/stock_location/test/stock_location_pull_flow.yml
+++ b/addons/stock_location/test/stock_location_pull_flow.yml
@@ -28,7 +28,7 @@
I create a account type Receivable.
-
!record {model: account.account.type, id: account_account_type_receivable0}:
- close_method: balance
+ close_method: unreconciled
code: receivable_test
name: Receivable For Tests
sign: 1
@@ -126,7 +126,7 @@
I create a product and define the pulled flow condition for stock move.
I set shipping type Sending Goods. and set Procurement type to move.
-
- !record {model: product.product, id: product_product_hpcdwriters0}:
+ !record {model: product.product, id: product_product_hpcdwriters01}:
categ_id: product_category_computer0
cost_method: standard
list_price: 1000.0
@@ -179,7 +179,7 @@
name: Testing pulled flow
priority: '1'
procure_method: make_to_order
- product_id: product_product_hpcdwriters0
+ product_id: product_product_hpcdwriters01
product_qty: 5.0
product_uom: product.product_uom_unit
product_uos: product.product_uom_unit
@@ -194,15 +194,7 @@
!python {model: procurement.order.compute.all}: |
proc_obj = self.pool.get('procurement.order')
proc_obj._procure_confirm(cr,uid)
--
- I check the state of procurement order is cancel and stock move is cancel.
--
- !python {model: procurement.order }: |
- from tools.translate import _
- procurement_ids=self.search(cr, uid, [('id', '=', ref('procurement_order_test0'))])
- if procurement_ids:
- order=self.browse(cr,uid,procurement_ids)[0]
- assert(order.state=='cancel')
+
-
I check the new procurement order has been created .
-
diff --git a/addons/stock_location/test/stock_location_push_flow.yml b/addons/stock_location/test/stock_location_push_flow.yml
index db2ae388317..b6a938e99e5 100644
--- a/addons/stock_location/test/stock_location_push_flow.yml
+++ b/addons/stock_location/test/stock_location_push_flow.yml
@@ -33,7 +33,7 @@
I set the chain location Supplier to stock Input
Stock Input to Quality test and Quality test -Stock .
-
- !record {model: product.product, id: product_product_hpcdwriters0}:
+ !record {model: product.product, id: product_product_hpcdwriters01}:
categ_id: product_category_computer0
cost_method: standard
list_price: 1000.0
@@ -72,7 +72,7 @@
location_dest_id: stock.stock_location_stock
location_id: stock.stock_location_suppliers
name: 'HP CD writers'
- product_id: product_product_hpcdwriters0
+ product_id: product_product_hpcdwriters01
product_qty: 6.0
product_uom: product.product_uom_unit
product_uos_qty: 6.0
diff --git a/addons/stock_planning/test/stock_planning.yml b/addons/stock_planning/test/stock_planning.yml
index 77f1d5a427d..df2f53dbb6e 100644
--- a/addons/stock_planning/test/stock_planning.yml
+++ b/addons/stock_planning/test/stock_planning.yml
@@ -38,6 +38,18 @@
date_start: !eval "'%s-07-29 00:00:00' %(datetime.now().year)"
date_stop: !eval "'%s-07-31 23:59:00' %(datetime.now().year)"
name: !eval "'%s, week 31' %(datetime.now().year)"
+-
+ I validate in open state module stock.period
+-
+ !python {model: stock.period}: |
+ self.button_open(cr, uid, [ref("stock_period_01")], {"lang": 'en_GB', "tz": False, "active_model": 'ir.ui.menu', "active_id": ref("stock_planning.menu_stock_period_main"), "active_ids": [ref("stock_planning.menu_stock_period_main")], "department_id": False})
+
+-
+ I validate in close state module stock.period
+-
+ !python {model: stock.period}: |
+ self.button_close(cr, uid, [ref("stock_period_01")], {"lang": 'en_GB', "tz": False, "active_model": 'ir.ui.menu', "active_id": ref("stock_planning.menu_stock_period_main"), "active_ids": [ref("stock_planning.menu_stock_period_main")], "department_id": False})
+
-
Now I create the forecast for this period for all PCs.
-
@@ -54,6 +66,66 @@
'en_US', "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_sale_forecast_createlines")],
"tz": False, "active_id": ref("stock_planning.menu_stock_sale_forecast_createlines"),
})
+
+-
+ I create stock.period.createlines for the first week of august.
+-
+ !record {model: stock.period.createlines, id: stock_period_createlines_week01}:
+ date_start: !eval "'%s-08-01' %(datetime.now().year)"
+ date_stop: !eval "'%s-08-06' %(datetime.now().year)"
+ name: !eval "'%s, week 31' %(datetime.now().year)"
+
+-
+ Performing an osv_memory action create_stock_periods on module stock.period.createlines
+-
+ !python {model: stock.period.createlines}: |
+ self.create_stock_periods(cr, uid, [ref("stock_period_createlines_week01")], {"lang":
+ 'en_US', "name": 'Weekly', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
+ "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
+ })
+-
+ I create stock.period.createlines for the month of august - september
+-
+ !record {model: stock.period.createlines, id: stock_period_createlines_month01}:
+ date_start: !eval "'%s-08-01' %(datetime.now().year)"
+ date_stop: !eval "'%s-09-01' %(datetime.now().year)"
+ name: !eval "'%s, month 8' %(datetime.now().year)"
+
+-
+ Performing an osv_memory action create_stock_periods on module stock.period.createlines
+-
+ !python {model: stock.period.createlines}: |
+ self.create_stock_periods(cr, uid, [ref("stock_period_createlines_month01")], {"lang":
+ 'en_US', "name": 'Monthly', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
+ "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
+ })
+
+-
+ I create stock.period.createlines for the Day of august
+-
+ !record {model: stock.period.createlines, id: stock_period_createlines_day01}:
+ date_start: !eval "'%s-08-01' %(datetime.now().year)"
+ date_stop: !eval "'%s-08-01' %(datetime.now().year)"
+ name: !eval "'%s, day 01' %(datetime.now().year)"
+
+-
+ Performing an osv_memory action create_stock_periods on module stock.period.createlines
+-
+ !python {model: stock.period.createlines}: |
+ self.create_stock_periods(cr, uid, [ref("stock_period_createlines_day01")], {"lang":
+ 'en_US', "name": 'Daily', "interval": 6, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
+ "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),
+ })
+
+-
+ I Read date_start on module stock.period.createlines.
+-
+ !python {model: stock.period.createlines }: |
+ self._get_new_period_start(cr, uid,{"lang":'en_US', "active_model": "ir.ui.menu",
+ "active_ids": [ref("stock_planning.menu_stock_period_creatlines")],
+ "tz": False, "active_id": ref("stock_planning.menu_stock_period_creatlines"),"department_id": False
+ })
+
-
I create a sale order for PC1-Basic PC and PC3-Medium PC.
-
@@ -100,11 +172,29 @@
'analyzed_period1_id': ref("stock_period_03"),
'analyzed_user_id': ref("base.user_root"),
'analyzed_warehouse_id': ref("stock.warehouse0")}
+ context = {"lang": "en_US", "tz":False, "search_default_create_uid": 1, "active_model": "ir.ui.menu",
+ "department_id": False, "active_ids": [ref("stock_planning.menu_stock_sale_forecast_all")],
+ "active_id": ref("stock_planning.menu_stock_sale_forecast_all"), }
self.write(cr, uid, forecast_ids, write_dict)
- self.calculate_sales_history(cr, uid, forecast_ids, {"lang": "en_US", "tz":
+ self.calculate_sales_history(cr, uid, forecast_ids, context)
+ self.action_validate(cr, uid, forecast_ids, context)
+
+-
+ Now I applying onchange and unlink forecast record for the product PC3
+-
+ !python {model: stock.sale.forecast}: |
+ forecast_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_pc3'))])
+ self.unlink(cr, uid, forecast_ids, {"lang": "en_US", "tz":
False, "search_default_create_uid": 1, "active_model": "ir.ui.menu", "department_id":
False, "active_ids": [ref("stock_planning.menu_stock_sale_forecast_all")], "active_id":
ref("stock_planning.menu_stock_sale_forecast_all"), })
+ self.product_id_change(cr, uid, forecast_ids, ref('product.product_product_20'))
+ self.onchange_uom(cr, uid, forecast_ids, ref('product.product_uom_unit'), False, ref('product.product_uom_unit'), ref('product.product_product_20'))
+ self.product_amt_change(cr, uid, forecast_ids, 5.0, ref('product.product_uom_unit'), ref('product.product_product_20'))
+ self.product_amt_change(cr, uid, forecast_ids, 5.0, ref('product.product_uom_unit'), ref('product.product_product_20'))
+ self._to_default_uom_factor(cr, uid, ref('product.product_product_20'), ref('product.product_uom_unit'), {})
+ self.onchange_company(cr, uid, forecast_ids, ref('stock.res_company_tinyshop0'))
+
-
I create Master procurement schedule for the third week of July.
-
@@ -113,10 +203,22 @@
period_id: stock_period_03
product_categ_id: product.product_category_pc
warehouse_id: stock.warehouse0
+
+-
+ I create source warehouse for supply from another warehouse.
+-
+ !record {model: stock.warehouse, id: stock_warehouse_0}:
+ name: shop1
+ company_id: base.main_company
+ lot_input_id: stock.stock_location_stock
+ lot_stock_id: stock.stock_location_stock
+ lot_output_id: stock.stock_location_output
+
-
Performing an osv_memory action create_planning on module stock.planning.createlines
-
!python {model: stock.planning.createlines}: |
+ self.onchange_company(cr, uid, ref("stock_planning_createlines_0"), ref('stock.res_company_tinyshop0'))
self.create_planning(cr, uid, [ref("stock_planning_createlines_0")], {"lang":
"en_US", "tz": False, "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_planning_createlines")],
"active_id": ref("stock_planning.menu_stock_planning_createlines"), "department_id":
@@ -126,11 +228,17 @@
-
!python {model: stock.planning}: |
planning_ids = self.search(cr, uid, [('product_id','=',ref('product.product_product_pc1')),('period_id','=',ref('stock_period_03'))])
- self.write(cr, uid, planning_ids, {'to_procure': 30.0,'planned_outgoing': 40.0})
- self.calculate_planning(cr, uid, planning_ids, {"lang": "en_US", "tz": False,
- "active_model": "ir.ui.menu", "active_ids": [ref("stock_planning.menu_stock_planning")],
+ self.write(cr, uid, planning_ids, {'to_procure': 30.0,'planned_outgoing': 40.0,'supply_warehouse_id': ref("stock_warehouse_0")})
+ self.onchange_company(cr, uid, planning_ids, ref('stock.res_company_tinyshop0'))
+ self.onchange_uom(cr, uid, planning_ids, ref('product.product_uom_unit'), ref('product.product_product_pc1'),ref('product.product_uom_unit'), False, False)
+ self.product_id_change(cr, uid, planning_ids, ref('product.product_product_20'))
+ context = {"lang": "en_US", "tz": False, "active_model": "ir.ui.menu",
+ "active_ids": [ref("stock_planning.menu_stock_planning")],
"active_id": ref("stock_planning.menu_stock_planning"), "department_id": False,
- })
+ }
+ self.calculate_planning(cr, uid, planning_ids, context)
+ self.internal_supply(cr, uid, planning_ids, context)
+
-
I create a procurement order for the incoming products left.
-
diff --git a/addons/survey/survey.py b/addons/survey/survey.py
index 78b824af004..8bce83380b6 100644
--- a/addons/survey/survey.py
+++ b/addons/survey/survey.py
@@ -58,7 +58,7 @@ class survey(osv.osv):
help="Set to one if survey is answerable only once"),
'response_user': fields.integer('Maximum Answer per User',
help="Set to one if you require only one Answer per user"),
- 'state': fields.selection([('draft', 'Draft'), ('open', 'Open'), ('close', 'Closed'), ('cancel', 'Cancelled')], 'Status', readonly=True),
+ 'state': fields.selection([('open', 'Open'), ('close', 'Closed'), ('cancel', 'Cancelled')], 'Status', readonly=True),
'responsible_id': fields.many2one('res.users', 'Responsible', help="User responsible for survey"),
'tot_start_survey': fields.integer("Total Started Survey", readonly=1),
'tot_comp_survey': fields.integer("Total Completed Survey", readonly=1),
@@ -70,17 +70,13 @@ class survey(osv.osv):
'invited_user_ids': fields.many2many('res.users', 'survey_invited_user_rel', 'sid', 'uid', 'Invited User'),
}
_defaults = {
- 'state': lambda * a: "draft",
+ 'state': lambda * a: "open",
'tot_start_survey': lambda * a: 0,
'tot_comp_survey': lambda * a: 0,
'send_response': lambda * a: 1,
'response_user': lambda * a:1,
}
- def survey_draft(self, cr, uid, ids, arg):
- self.write(cr, uid, ids, {'state': 'draft'})
- return True
-
def survey_open(self, cr, uid, ids, arg):
self.write(cr, uid, ids, {'state': 'open', 'date_open': strftime("%Y-%m-%d %H:%M:%S")})
return True
diff --git a/addons/survey/survey_demo.xml b/addons/survey/survey_demo.xml
index 97e8daeb5b4..a351a3da9b4 100644
--- a/addons/survey/survey_demo.xml
+++ b/addons/survey/survey_demo.xml
@@ -2140,7 +2140,7 @@
Community SurveyPlease take a few minutes to complete this survey on the quality of service we provide. We welcome your feedback and appreciate your honesty. With your help, we hope to strengthen the bond between our clients.
- draft
+ open
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index 00ac7620be7..f92ce45a037 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -180,14 +180,12 @@
-
+
-
-
+
@@ -261,7 +259,8 @@
-
+
+
diff --git a/addons/thunderbird/thunderbird_installer.xml b/addons/thunderbird/thunderbird_installer.xml
index 2ab1d97fe46..cf23cdf45c1 100644
--- a/addons/thunderbird/thunderbird_installer.xml
+++ b/addons/thunderbird/thunderbird_installer.xml
@@ -75,8 +75,10 @@
{'menu':True}
-
-
+
+
+
+
diff --git a/addons/users_ldap/users_ldap.py b/addons/users_ldap/users_ldap.py
index bddaaeed6ae..7c3bd0d9c17 100644
--- a/addons/users_ldap/users_ldap.py
+++ b/addons/users_ldap/users_ldap.py
@@ -43,7 +43,7 @@ class CompanyLDAP(osv.osv):
'ldap_password': fields.char('LDAP password', size=64,
help=("The password of the user account on the LDAP server that is "
"used to query the directory.")),
- 'ldap_filter': fields.char('LDAP filter', size=64, required=True),
+ 'ldap_filter': fields.char('LDAP filter', size=256, required=True),
'ldap_base': fields.char('LDAP base', size=64, required=True),
'user': fields.many2one('res.users', 'Model User',
help="Model used for user creation"),