[MERGE] Merge the changes from main trunk branch.
bzr revid: jma@tinyerp.com-20100616114211-baomq9ypqtpbv3ck
This commit is contained in:
commit
3fcdccbeca
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-06-04 16:42+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 07:00+0000\n"
|
||||
"Last-Translator: eLBati - albatos.com <lorenzo.battistini@albatos.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-11 03:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: account
|
||||
|
@ -1176,7 +1176,7 @@ msgstr ""
|
|||
#. module: account
|
||||
#: field:account.payment.term,line_ids:0
|
||||
msgid "Terms"
|
||||
msgstr "Periodi"
|
||||
msgstr "Condizioni"
|
||||
|
||||
#. module: account
|
||||
#: rml:account.vat.declaration:0
|
||||
|
|
|
@ -30,7 +30,7 @@ import invoice
|
|||
import overdue
|
||||
import aged_trial_balance
|
||||
import tax_report
|
||||
import account_tax_code
|
||||
#import account_tax_code
|
||||
import account_balance_landscape
|
||||
import compare_account_balance
|
||||
import account_invoice_report
|
||||
|
|
|
@ -400,13 +400,5 @@
|
|||
src_model="res.partner.address"
|
||||
/>
|
||||
|
||||
<menuitem icon="terp-purchase" id="base.menu_purchase_root"
|
||||
name="Procurement Management" sequence="7" />
|
||||
<menuitem id="base.menu_procurement_management_supplier"
|
||||
name="Suppliers" parent="base.menu_purchase_root" sequence="3" />
|
||||
<menuitem name="Contacts" id="menu_partner_contact_supplier_form"
|
||||
action="action_partner_contact_form"
|
||||
parent="base.menu_procurement_management_supplier" sequence="2" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-04-09 18:42+0000\n"
|
||||
"Last-Translator: Nicola Pedron <Unknown>\n"
|
||||
"PO-Revision-Date: 2010-06-15 12:50+0000\n"
|
||||
"Last-Translator: Rinux <Unknown>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-17 04:20+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: base_module_quality
|
||||
|
@ -33,7 +33,7 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: model:ir.module.module,shortdesc:base_module_quality.module_meta_information
|
||||
msgid "Base module quality"
|
||||
msgstr ""
|
||||
msgstr "Modulo base di qualità"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: field:module.quality.check,name:0
|
||||
|
@ -63,7 +63,7 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,ponderation:0
|
||||
msgid "Ponderation"
|
||||
msgstr ""
|
||||
msgstr "Ponderazione"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: help:module.quality.detail,ponderation:0
|
||||
|
@ -110,7 +110,7 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: wizard_field:quality_detail_save,init,module_file:0
|
||||
msgid "Save report"
|
||||
msgstr ""
|
||||
msgstr "Salva report"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: wizard_field:quality_detail_save,init,name:0
|
||||
|
@ -120,12 +120,12 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,score:0
|
||||
msgid "Score (%)"
|
||||
msgstr ""
|
||||
msgstr "Punteggio (%)"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: help:quality_detail_save,init,name:0
|
||||
msgid "Save report as .html format"
|
||||
msgstr ""
|
||||
msgstr "Salva report come formato .html"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
|
@ -146,12 +146,12 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: view:module.quality.detail:0
|
||||
msgid "Save Report"
|
||||
msgstr ""
|
||||
msgstr "Salva report"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.actions.wizard,name:base_module_quality.create_quality_check_id
|
||||
msgid "Quality Check"
|
||||
msgstr ""
|
||||
msgstr "Controllo di qualità"
|
||||
|
||||
#. module: base_module_quality
|
||||
#: model:ir.model,name:base_module_quality.model_module_quality_detail
|
||||
|
@ -182,4 +182,4 @@ msgstr ""
|
|||
#. module: base_module_quality
|
||||
#: field:module.quality.detail,quality_check_id:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
msgstr "Qualità"
|
||||
|
|
|
@ -36,6 +36,7 @@ If you don't think you need any of these right now, you can easily install them
|
|||
<field name="profile_association" on_change="onchange_moduleselection(crm,sale,project,knowledge,stock,mrp,account,purchase,hr,point_of_sale,marketing,misc_tools,report_designer,profile_association,profile_auction,profile_bookstore)"/>
|
||||
<field name="profile_auction" on_change="onchange_moduleselection(crm,sale,project,knowledge,stock,mrp,account,purchase,hr,point_of_sale,marketing,misc_tools,report_designer,profile_association,profile_auction,profile_bookstore)"/>
|
||||
<field name="profile_bookstore" on_change="onchange_moduleselection(crm,sale,project,knowledge,stock,mrp,account,purchase,hr,point_of_sale,marketing,misc_tools,report_designer,profile_association,profile_auction,profile_bookstore)"/>
|
||||
<field name="product_expiry" on_change="onchange_moduleselection(crm,sale,project,knowledge,stock,mrp,account,purchase,hr,point_of_sale,marketing,misc_tools,report_designer,profile_association,profile_auction,profile_bookstore)"/>
|
||||
</group>
|
||||
</data>
|
||||
</field>
|
||||
|
|
|
@ -75,6 +75,9 @@ class base_setup_installer(osv.osv_memory):
|
|||
"OpenERP's report creation."),
|
||||
'thunderbird' :fields.boolean('Thunderbird'),
|
||||
# Vertical modules
|
||||
'product_expiry':fields.boolean('Food Industry',
|
||||
help="Installs a preselected set of OpenERP "
|
||||
"applications which will help you manage foods."),
|
||||
'profile_association':fields.boolean('Associations',
|
||||
help="Installs a preselected set of OpenERP "
|
||||
"applications which will help you manage your association "
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-04-24 15:45+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:17+0000\n"
|
||||
"Last-Translator: Niels Huylebroeck <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-17 04:15+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: board
|
||||
|
@ -26,50 +26,50 @@ msgstr ""
|
|||
#. module: board
|
||||
#: model:ir.model,name:board.model_board_board
|
||||
msgid "board.board"
|
||||
msgstr ""
|
||||
msgstr "board.board"
|
||||
|
||||
#. module: board
|
||||
#: field:board.note,user_id:0
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
msgstr "Auteur"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.module.module,shortdesc:board.module_meta_information
|
||||
msgid "Dashboard main module"
|
||||
msgstr ""
|
||||
msgstr "Algemene dashboard module"
|
||||
|
||||
#. module: board
|
||||
#: view:board.note:0
|
||||
#: field:board.note,note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
msgstr "Notitie"
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,width:0
|
||||
msgid "Width"
|
||||
msgstr ""
|
||||
msgstr "Breedte"
|
||||
|
||||
#. module: board
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige modelnaam in de actie-definitie."
|
||||
|
||||
#. module: board
|
||||
#: field:board.board.line,name:0
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
msgstr "Titel"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.action_view_board_list_form
|
||||
#: model:ir.ui.menu,name:board.menu_view_board_form
|
||||
msgid "Dashboard Definition"
|
||||
msgstr ""
|
||||
msgstr "Dashboard definitie"
|
||||
|
||||
#. module: board
|
||||
#: model:ir.actions.act_window,name:board.action_view_board_note_form
|
||||
#: model:ir.ui.menu,name:board.menu_view_board_note_form
|
||||
msgid "Publish a note"
|
||||
msgstr ""
|
||||
msgstr "Publiceer een opmerking"
|
||||
|
||||
#. module: board
|
||||
#: wizard_view:board.board.menu.create,init:0
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<field name="res_model">purchase.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','=','draft')]</field>
|
||||
<field name="domain">[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','=','draft')]</field>
|
||||
<field name="search_view_id" ref="purchase.purchase_order_tree"/>
|
||||
</record>
|
||||
<record id="purchase_waiting" model="ir.actions.act_window">
|
||||
|
@ -23,7 +23,7 @@
|
|||
<field name="res_model">purchase.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','in',('wait','confirmed'))]</field>
|
||||
<field name="domain">[('date_order','>',time.strftime('%Y-01-01 00:00:00')),('date_order','<',time.strftime('%Y-12-31 23:59:59')), ('state','in',('wait','confirmed'))]</field>
|
||||
<field name="search_view_id" ref="purchase.purchase_order_tree"/>
|
||||
</record>
|
||||
|
||||
|
@ -39,8 +39,8 @@
|
|||
<action colspan="4" height="220" name="%(purchase_waiting)d" string="Purchase Order in Waiting" width="510"/>
|
||||
</child1>
|
||||
<child2>
|
||||
<action colspan="4" height="220" name="%(purchase.action_purchase_order_qty_amount_all)d" string="Total Qty and Amount by month" />
|
||||
<action colspan="4" height="220" name="%(purchase.action_purchase_order_by_user_all)d" string="Total Orders by User per month" />
|
||||
<action colspan="4" height="220" name="%(purchase.action_purchase_order_report_graph)d" string="Total Qty and Amount by month" />
|
||||
<action colspan="4" height="220" name="%(purchase.action_purchase_order_by_user_all)d" string="Total Orders Lines by User per month" />
|
||||
</child2>
|
||||
</hpaned>
|
||||
</form>
|
||||
|
|
|
@ -17,6 +17,6 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import claim_delivery
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
|
||||
class stock_picking(osv.osv):
|
||||
_inherit = "stock.picking"
|
||||
_columns = {
|
||||
'partner_id': fields.related('address_id','partner_id',type='many2one', relation="res.partner", string="Partner"),
|
||||
}
|
||||
stock_picking()
|
|
@ -1,12 +1,32 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
|
||||
<record id="view_picking_delivery" model="ir.ui.view">
|
||||
<field name="name">stock.picking.delivery.form20</field>
|
||||
<field name="model">stock.picking</field>
|
||||
<field name="type">form</field>
|
||||
<field name="priority" eval="2"/>
|
||||
<field name="inherit_id" ref="stock.view_picking_delivery_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form/group/field[@name='date']" position="after">
|
||||
<field name="partner_id" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
id="act_claim_from_delivery"
|
||||
id="action_claim_from_delivery"
|
||||
name="Claim"
|
||||
domain="[]"
|
||||
target="current"
|
||||
view_mode="form"
|
||||
res_model="crm.claim"
|
||||
src_model="stock.picking"/>
|
||||
|
||||
|
||||
<record id="action_claim_from_delivery" model="ir.actions.act_window">
|
||||
<field name="context">{'default_partner_address_id': address_id, 'default_partner_id': partner_id}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -74,7 +74,8 @@ class crm_claim(osv.osv, crm.crm_case):
|
|||
'company_id': fields.many2one('res.company', 'Company'),
|
||||
'partner_id': fields.many2one('res.partner', 'Partner'),
|
||||
'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact', \
|
||||
domain="[('partner_id','=',partner_id)]"),
|
||||
# domain="[('partner_id','=',partner_id)]"
|
||||
),
|
||||
'email_cc': fields.text('Watchers Emails', size=252, help="These people will receive a copy of the future communication between partner and users by email"),
|
||||
'email_from': fields.char('Email', size=128, help="These people will receive email."),
|
||||
'partner_name': fields.char("Employee's Name", size=64),
|
||||
|
|
|
@ -92,11 +92,18 @@
|
|||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Claims">
|
||||
<group colspan="4" col="4">
|
||||
<field name="name"/>
|
||||
<field name="date" string="Date of Claim"/>
|
||||
<field name="date_deadline" string="Deadline"/>
|
||||
|
||||
<group colspan="4" col="4">
|
||||
<group colspan="1" col="2">
|
||||
<field name="name" />
|
||||
</group>
|
||||
<group colspan="1" col="2">
|
||||
<field name="date" string="Date of Claim"/>
|
||||
</group>
|
||||
<group colspan="1" col="2">
|
||||
<field name="date_deadline" string="Deadline"/><newline/>
|
||||
</group>
|
||||
</group>
|
||||
<group colspan="4" col="4">
|
||||
|
||||
<notebook>
|
||||
|
@ -295,5 +302,22 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
domain="[('partner_id', '=', active_id)]"
|
||||
context="{'default_partner_id': active_id}"
|
||||
id="act_claim_partner"
|
||||
name="Report a Claim"
|
||||
res_model="crm.claim"
|
||||
src_model="res.partner"/>
|
||||
|
||||
|
||||
<act_window
|
||||
domain="[('partner_address_id', '=', active_id)]"
|
||||
context="{'default_partner_address_id': active_id}"
|
||||
id="act_claim_partner_address"
|
||||
name="Report a Claim"
|
||||
res_model="crm.claim"
|
||||
src_model="res.partner.address"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -273,7 +273,7 @@
|
|||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page[@string='Sale Order']/group[1]/button[@name='button_dummy']" position="after">
|
||||
<button name="%(action_delivery_cost)d" states="draft" string="Delivery Costs" type="action" icon="gtk-execute" context="{'order_id':id}"/>
|
||||
<button name="%(action_delivery_cost)d" states="draft" string="Delivery Costs" type="action" icon="gtk-add" context="{'order_id':id}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -633,6 +633,18 @@ class email_template_preview(osv.osv_memory):
|
|||
_name = "email_template.preview"
|
||||
_description = "Email Template Preview"
|
||||
|
||||
def _get_model_recs(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
#Fills up the selection box which allows records from the selected object to be displayed
|
||||
self.context = context
|
||||
if 'template_id' in context.keys():
|
||||
ref_obj_id = self.pool.get('email.template').read(cr, uid, context['template_id'], ['object_name'], context)
|
||||
ref_obj_name = self.pool.get('ir.model').read(cr, uid, ref_obj_id['object_name'][0], ['model'], context)['model']
|
||||
ref_obj_ids = self.pool.get(ref_obj_name).search(cr, uid, [], context=context)
|
||||
ref_obj_recs = self.pool.get(ref_obj_name).name_get(cr, uid, ref_obj_ids, context)
|
||||
return ref_obj_recs
|
||||
|
||||
def _default_model(self, cursor, user, context=None):
|
||||
"""
|
||||
Returns the default value for model field
|
||||
|
@ -643,7 +655,7 @@ class email_template_preview(osv.osv_memory):
|
|||
return self.pool.get('email.template').read(
|
||||
cursor,
|
||||
user,
|
||||
context['active_id'],
|
||||
context['template_id'],
|
||||
['object_name'],
|
||||
context)['object_name']
|
||||
|
||||
|
@ -652,6 +664,7 @@ class email_template_preview(osv.osv_memory):
|
|||
'email.template',
|
||||
'Template', readonly=True),
|
||||
'rel_model':fields.many2one('ir.model', 'Model', readonly=True),
|
||||
'rel_model_ref':fields.selection(_get_model_recs, 'Referred Document'),
|
||||
'to':fields.char('To', size=250, readonly=True),
|
||||
'cc':fields.char('CC', size=250, readonly=True),
|
||||
'bcc':fields.char('BCC', size=250, readonly=True),
|
||||
|
@ -661,10 +674,9 @@ class email_template_preview(osv.osv_memory):
|
|||
'report':fields.char('Report Name', size=100, readonly=True),
|
||||
}
|
||||
_defaults = {
|
||||
'ref_template': lambda self, cr, uid, ctx:ctx['active_id'],
|
||||
'ref_template': lambda self, cr, uid, ctx:ctx['template_id'],
|
||||
'rel_model': _default_model
|
||||
}
|
||||
# Need to check
|
||||
def on_change_ref(self, cr, uid, ids, rel_model_ref, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
@ -673,13 +685,13 @@ class email_template_preview(osv.osv_memory):
|
|||
vals = {}
|
||||
if context == {}:
|
||||
context = self.context
|
||||
template = self.pool.get('email.template').browse(cr, uid, context['active_id'], context)
|
||||
template = self.pool.get('email.template').browse(cr, uid, context['template_id'], context)
|
||||
#Search translated template
|
||||
lang = get_value(cr, uid, rel_model_ref, template.lang, template, context)
|
||||
if lang:
|
||||
ctx = context.copy()
|
||||
ctx.update({'lang':lang})
|
||||
template = self.pool.get('email.template').browse(cr, uid, context['active_id'], ctx)
|
||||
template = self.pool.get('email.template').browse(cr, uid, context['template_id'], ctx)
|
||||
vals['to'] = get_value(cr, uid, rel_model_ref, template.def_to, template, context)
|
||||
vals['cc'] = get_value(cr, uid, rel_model_ref, template.def_cc, template, context)
|
||||
vals['bcc'] = get_value(cr, uid, rel_model_ref, template.def_bcc, template, context)
|
||||
|
|
|
@ -20,19 +20,17 @@
|
|||
<newline />
|
||||
<field name="subject" />
|
||||
<newline />
|
||||
<field name="body_text" />
|
||||
<newline />
|
||||
<!-- <field name="body_html" widget="text_html" />-->
|
||||
<!--
|
||||
Removed text_html because it doesnt work in GTK
|
||||
And TinyMCE messes up the HTML in Web Client
|
||||
-->
|
||||
<field name="body_html"/>
|
||||
<separator string= "Body(Text)" colspan="2"/>
|
||||
<newline/>
|
||||
<field name="body_text" nolabel="1" colspan="2"/>
|
||||
<newline/>
|
||||
<separator string= "Body(Html)" colspan="2"/>
|
||||
<newline/>
|
||||
<field name="body_html" nolabel="1" colspan="2"/>
|
||||
<newline />
|
||||
<field name="report" />
|
||||
<group>
|
||||
<button icon="gtk-ok" special="cancel" string="OK" />
|
||||
</group>
|
||||
<newline/>
|
||||
<button icon="gtk-ok" special="cancel" string="OK" colspan="2"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -46,7 +44,7 @@
|
|||
<field name="view_mode">form</field>
|
||||
<field name="auto_refresh" eval="1" />
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'ids':active_id}</field>
|
||||
<field name="context">{'template_id':active_id}</field>
|
||||
</record>
|
||||
<!--EMail client Form view -->
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: google_map
|
||||
|
|
|
@ -27,6 +27,7 @@ from dateutil.relativedelta import relativedelta
|
|||
from osv import fields, osv
|
||||
import netsvc
|
||||
import tools
|
||||
from tools.translate import _
|
||||
|
||||
_intervalTypes = {
|
||||
'hours': lambda interval: relativedelta(hours=interval),
|
||||
|
@ -207,10 +208,7 @@ class marketing_campaign_activity(osv.osv):
|
|||
'start': fields.boolean('Start',help= "This activity is launched when the campaign starts."),
|
||||
'condition': fields.char('Condition', size=256, required=True,
|
||||
help="Python condition to know if the activity can be launched"),
|
||||
'type': fields.selection([('email', 'E-mail'),
|
||||
('paper', 'Paper'),
|
||||
('action', 'Action'),
|
||||
('subcampaign', 'Sub-Campaign')],
|
||||
'type': fields.selection(_actions_type,
|
||||
'Type', required=True,
|
||||
help="Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."),
|
||||
'email_template_id': fields.many2one('email.template','Email Template'),
|
||||
|
@ -278,41 +276,6 @@ class marketing_campaign_activity(osv.osv):
|
|||
print 'Sending Email Init', activity.name
|
||||
return self.pool.get('email.template').generate_mail(cr, uid, activity.email_template_id.id, [workitem.res_id], context=context)
|
||||
|
||||
#if not template.enforce_from_account:
|
||||
# self.pool.get('marketing.campaign.workitem').write(cr, uid, [workitem.id], {
|
||||
# 'error_msg': 'There is no account defined for the email',
|
||||
# 'state': 'exception'
|
||||
# })
|
||||
# return False
|
||||
#if not workitem.partner_id.email:
|
||||
# self.pool.get('marketing.campaign.workitem').write(cr, uid, [workitem.id], {
|
||||
# 'error_msg': "There is no email defined for the partner",
|
||||
# 'state': 'exception'
|
||||
# })
|
||||
# return False
|
||||
#vals = {
|
||||
# 'email_from': tools.ustr(accounts.name) + "<" + tools.ustr(accounts.email_id) + ">",
|
||||
# 'email_to': template.email_to,
|
||||
# 'email_cc': template.email_cc,
|
||||
# 'email_bcc': template.email_bcc,
|
||||
# 'subject': template.def_subject,
|
||||
# 'body_text': template.def_body_text,
|
||||
# 'body_html': template.def_body_html,
|
||||
# 'account_id': accounts.id,
|
||||
# 'state':'na',
|
||||
# 'mail_type':'multipart/alternative' #Options:'multipart/mixed','multipart/alternative','text/plain','text/html'
|
||||
#}
|
||||
# # if accounts.use_sign:
|
||||
# # signature = self.pool.get('res.users').read(cr, uid, uid, ['signature'], context)['signature']
|
||||
# # if signature:
|
||||
# # vals['pem_body_text'] = tools.ustr(vals['pem_body_text'] or '') + signature
|
||||
# # vals['pem_body_html'] = tools.ustr(vals['pem_body_html'] or '') + signature
|
||||
|
||||
##Create partly the mail and later update attachments
|
||||
#print 'Sending Email', vals
|
||||
#mail_id = self.pool.get('email_template.mailbox').create(cr, uid, vals, context)
|
||||
return True
|
||||
|
||||
def process_wi_action(self, cr, uid, activity, workitem, context={}):
|
||||
context = {}
|
||||
server_obj = self.pool.get('ir.actions.server')
|
||||
|
@ -446,7 +409,10 @@ class marketing_campaign_workitem(osv.osv):
|
|||
self.write(cr, uid, wi.id, {'state': 'done'})
|
||||
self.process_chain(cr, uid, wi.id, context)
|
||||
else:
|
||||
self.write(cr, uid, wi.id, {'state': 'exception'})
|
||||
vals = {'state': 'exception'}
|
||||
if type(result) == type({}) and 'error_msg' in result:
|
||||
vals['error_msg'] = result['error_msg']
|
||||
self.write(cr, uid, wi.id, vals)
|
||||
except Exception,e:
|
||||
self.write(cr, uid, wi.id, {'state': 'exception', 'error_msg': str(e)})
|
||||
else :
|
||||
|
@ -470,6 +436,42 @@ class marketing_campaign_workitem(osv.osv):
|
|||
if workitem_ids:
|
||||
self.process(cr, uid, workitem_ids, context)
|
||||
|
||||
def preview(self, cr, uid, ids, context):
|
||||
res = {}
|
||||
wi_obj = self.browse(cr, uid, ids)[0]
|
||||
if wi_obj.activity_id.type == 'email':
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
data_id = data_obj._get_id(cr, uid, 'email_template', 'email_template_preview_form')
|
||||
if data_id:
|
||||
view_id = data_obj.browse(cr, uid, data_id, context=context).res_id
|
||||
res = {
|
||||
'name': _('Email Preview'),
|
||||
'view_type': 'form',
|
||||
'view_mode': 'form,tree',
|
||||
'res_model': 'email_template.preview',
|
||||
'view_id': False,
|
||||
'context': context,
|
||||
'views': [(view_id, 'form')],
|
||||
'type': 'ir.actions.act_window',
|
||||
'target': 'new',
|
||||
'nodestroy':True,
|
||||
'context': "{'template_id':%d,'rel_model_ref':%d}"%
|
||||
(wi_obj.activity_id.email_template_id.id,
|
||||
wi_obj.res_id)
|
||||
|
||||
}
|
||||
|
||||
elif wi_obj.activity_id.type == 'paper':
|
||||
datas = {'ids': [wi_obj.res_id],
|
||||
'model': wi_obj.object_id.model}
|
||||
res = {
|
||||
'type' : 'ir.actions.report.xml',
|
||||
'report_name': wi_obj.activity_id.report_id.report_name,
|
||||
'datas' : datas,
|
||||
'nodestroy': True,
|
||||
}
|
||||
return res
|
||||
|
||||
marketing_campaign_workitem()
|
||||
|
||||
class email_template(osv.osv):
|
||||
|
@ -478,6 +480,21 @@ class email_template(osv.osv):
|
|||
'object_name': lambda obj, cr, uid, context: context.get('object_id',False),
|
||||
}
|
||||
email_template()
|
||||
|
||||
class email_template_preview(osv.osv_memory):
|
||||
_inherit = "email_template.preview"
|
||||
|
||||
def _default_rel_model(self, cr, uid, context=None):
|
||||
if 'rel_model_ref' in context :
|
||||
return context['rel_model_ref']
|
||||
else :
|
||||
return False
|
||||
|
||||
_defaults = {
|
||||
'rel_model_ref' : _default_rel_model
|
||||
}
|
||||
|
||||
email_template_preview()
|
||||
|
||||
class report_xml(osv.osv):
|
||||
_inherit = 'ir.actions.report.xml'
|
||||
|
|
|
@ -289,7 +289,7 @@
|
|||
<field name="email_template_id" attrs="{'required':[('type','=','email')]}" />
|
||||
</group>
|
||||
<group colspan="4" attrs="{'invisible':[('type','!=','paper')]}" >
|
||||
<field name="report_id" attrs="{'required':[('type','=','paper')]}"/>
|
||||
<field name="report_id" attrs="{'required':[('type','=','paper')]}" context="{'object_id':object_id}"/>
|
||||
<field name="report_directory_id" attrs="{'required':[('type','=','paper')]}" />
|
||||
</group>
|
||||
<group colspan="4" attrs="{'invisible':[('type','!=','action')]}" >
|
||||
|
|
|
@ -20,5 +20,5 @@
|
|||
##############################################################################
|
||||
|
||||
import marketing_campaign_mailchimp
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
import wizard
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
'init_xml': [],
|
||||
'update_xml': [
|
||||
'marketing_campaign_mailchimp_view.xml',
|
||||
'wizard/create_list_view.xml',
|
||||
],
|
||||
'demo_xml': [],
|
||||
'installable': True,
|
||||
|
|
|
@ -18,16 +18,19 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
|
||||
import urllib
|
||||
import urllib2
|
||||
import simplejson as json
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
from osv import fields, osv
|
||||
from marketing_campaign.marketing_campaign import _intervalTypes
|
||||
mailchimp_url = 'http://%s.api.mailchimp.com/1.2'
|
||||
|
||||
class marketing_campaign_mailchimp_account(osv.osv): #{{{
|
||||
_name = "marketing.campaign.mailchimp.account"
|
||||
class mailchimp_account(osv.osv):
|
||||
_name = "mailchimp.account"
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Account Name', size=64),
|
||||
|
@ -52,12 +55,10 @@ class marketing_campaign_mailchimp_account(osv.osv): #{{{
|
|||
params['password'] = mailchimp_account.password
|
||||
else :
|
||||
params['apikey'] = mailchimp_account.apikey
|
||||
params = '&'.join(map(lambda x : '%s=%s' %(x, params[x]), params))
|
||||
url = mailchimp_url%mailchimp_account.data_center+ '/?method=%s'%method
|
||||
req = urllib2.Request(url, params)
|
||||
handle = urllib2.urlopen(req)
|
||||
response = json.loads(handle.read())
|
||||
return response
|
||||
params = urllib.urlencode(params, doseq=True)
|
||||
response = urllib2.urlopen(url, params)
|
||||
return json.loads(response.read())
|
||||
|
||||
def button_approve(self, cr, uid, ids, context):
|
||||
acc_obj = self.browse(cr, uid, ids)[0]
|
||||
|
@ -80,33 +81,57 @@ class marketing_campaign_mailchimp_account(osv.osv): #{{{
|
|||
def button_cancel(self, cr, uid, ids, context):
|
||||
self.write(cr, uid, ids, {'state': 'cancelled'})
|
||||
return True
|
||||
|
||||
marketing_campaign_mailchimp_account() #}}}
|
||||
|
||||
def add_partner_list(self, cr, uid, account_id, list_id, partner_ids):
|
||||
vals = {} # just dictionary with partner_id and updated in list or not
|
||||
for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids):
|
||||
params = {'id' : list_id,
|
||||
'email_address' : partner.email,
|
||||
'email_type':'text',
|
||||
'merge_vars[FNAME]':partner.name ,
|
||||
'merge_vars[date]' : time.strftime('%Y-%m-%d'),
|
||||
'merge_vars[phone]' : partner.phone,
|
||||
'merge_vars[website]' : partner.website,
|
||||
'merge_vars[address][country]' : partner.country.code,
|
||||
'merge_vars[address][city]' : partner.city,
|
||||
'double_optin':False}
|
||||
vals[partner.id] = self.get_response(cr, uid, account_id,
|
||||
'listSubscribe', params)
|
||||
return vals
|
||||
|
||||
mailchimp_account()
|
||||
|
||||
#class marketing_campaign_mailchimp_list(osv.osv_memory): #{{{
|
||||
# _name = "marketing.campaign.mailchimp.list"
|
||||
#
|
||||
# _columns = {
|
||||
# 'name': fields.char('Name', size=64),
|
||||
# 'mailchimp_account_id': fields.many2one('marketing.campaign.mailchimp.account', 'Account'),
|
||||
# 'list_id': fields.char('List Id', size=64,),
|
||||
# }
|
||||
#
|
||||
# _defaults = {
|
||||
# 'state': lambda *a: 'draft'
|
||||
# }
|
||||
#
|
||||
#marketing_campaign_mailchimp_list() #}}}
|
||||
class mailchimp_list(osv.osv_memory):
|
||||
_name = "mailchimp.list"
|
||||
_description = "Mailchimp list"
|
||||
|
||||
_columns = {
|
||||
'mailchimp_account_id': fields.many2one('mailchimp.account',
|
||||
'Mailchimp Account', required=True),
|
||||
'name': fields.char('Name', size=64)
|
||||
}
|
||||
|
||||
mailchimp_list()
|
||||
|
||||
class marketing_campaign(osv.osv):
|
||||
_inherit = "marketing.campaign"
|
||||
|
||||
class marketing_campaign_segment(osv.osv): #{{{
|
||||
_inherit = "marketing.campaign.segment"
|
||||
|
||||
_columns = {
|
||||
'synchro': fields.boolean('Mailchimp Synchro'),
|
||||
'mailchimp_account_id': fields.many2one(
|
||||
'marketing.campaign.mailchimp.account', 'Account'),
|
||||
'mailchimp.account', 'Account'),
|
||||
'mailchimp_campaign': fields.char('campaign', size=64),
|
||||
}
|
||||
marketing_campaign()
|
||||
|
||||
|
||||
class marketing_campaign_activity(osv.osv):
|
||||
_inherit = "marketing.campaign.activity"
|
||||
|
||||
_columns = {
|
||||
'mailchimp_account_id': fields.many2one(
|
||||
'mailchimp.account', 'Account'),
|
||||
'mailchimp_list': fields.char('List', size=64),
|
||||
}
|
||||
}
|
||||
|
||||
def onchange_mailchimp(self, cr, uid, ids, mailchimp_account_id):
|
||||
if mailchimp_account_id:
|
||||
|
@ -116,16 +141,70 @@ class marketing_campaign_segment(osv.osv): #{{{
|
|||
def onchange_mailchimp_list(self, cr, uid, ids, mailchimp_account_id,
|
||||
mailchimp_list):
|
||||
if mailchimp_account_id and mailchimp_list:
|
||||
lists = self.pool.get('marketing.campaign.mailchimp.account').get_response(cr,
|
||||
lists = self.pool.get('mailchimp.account').get_response(cr,
|
||||
uid, mailchimp_account_id, 'lists')
|
||||
list_names = [list['name'] for list in lists]
|
||||
list_names = [l['name'] for l in lists]
|
||||
if mailchimp_list not in list_names:
|
||||
raise osv.except_osv('Error!!!',"Lists doesn't exists")
|
||||
else :
|
||||
return {}
|
||||
return {'value':{}}
|
||||
marketing_campaign_segment() #}}}
|
||||
|
||||
|
||||
def process_wi_mailchimp(self, cr, uid, activity, workitem, context={}):
|
||||
mailchimp_account_id = activity.mailchimp_account_id.id
|
||||
list_name = activity.mailchimp_list
|
||||
mc_acc_obj = self.pool.get('mailchimp.account')
|
||||
lists = mc_acc_obj.get_response(cr, uid, mailchimp_account_id, 'lists')
|
||||
list_id = ''
|
||||
for l in lists :
|
||||
if l['name'] == list_name:
|
||||
list_id = l['id']
|
||||
break;
|
||||
res_model = workitem.object_id.model
|
||||
res_id = workitem.res_id
|
||||
model_obj = self.pool.get(res_model).browse(cr, uid, res_id)
|
||||
params ={}
|
||||
if res_model == 'res.partner' :
|
||||
params.update({'email_address' : model_obj.email,
|
||||
'merge_vars[FNAME]':model_obj.name and model_obj.name or '',
|
||||
'merge_vars[website]' : model_obj.website,
|
||||
'merge_vars[address][country]' : model_obj.country.code,
|
||||
})
|
||||
elif res_model == 'crm.lead' :
|
||||
params.update({'email_address' : model_obj.email_from,
|
||||
'merge_vars[FNAME]':model_obj.partner_name and \
|
||||
model_obj.partner_name or '',
|
||||
'merge_vars[address][country]' : model_obj.country_id and \
|
||||
model_obj.country_id.code or ''
|
||||
})
|
||||
if params['email_address'] :
|
||||
user = mc_acc_obj.get_response(cr, uid, mailchimp_account_id,
|
||||
'listMemberInfo',
|
||||
{'id' : list_id,
|
||||
'email_address': params['email_address']})
|
||||
# if there s no user with the specify email it will return error code
|
||||
# and thus we add that user otherwise user is alredy subscribe and there
|
||||
# is no need to subscribe user again
|
||||
if 'error' in user:
|
||||
params.update({'id' : list_id,
|
||||
'email_type':'text',
|
||||
'double_optin':False,
|
||||
'merge_vars[date]' : time.strftime('%Y-%m-%d'),
|
||||
'merge_vars[address][city]' : model_obj.city and model_obj.city or '',
|
||||
'merge_vars[phone]' : model_obj.phone and model_obj.phone or '',
|
||||
})
|
||||
res = mc_acc_obj.get_response(cr, uid, mailchimp_account_id, 'listSubscribe', params)
|
||||
# handle mailchimp error
|
||||
return True
|
||||
else :
|
||||
return {'error_msg' : "Invalid Email Address"}
|
||||
|
||||
def __init__(self, *args):
|
||||
res = super(marketing_campaign_activity, self).__init__(*args)
|
||||
self._actions.update({'mailchimp' : self.process_wi_mailchimp})
|
||||
self._actions_type.append(('mailchimp', 'Mailchimp'))
|
||||
return res
|
||||
|
||||
|
||||
marketing_campaign_activity()
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -4,23 +4,38 @@
|
|||
|
||||
<!--
|
||||
================================================================
|
||||
Marketing Segments Inherited View - mailchimp
|
||||
Marketing Activity Inherited View - mailchimp
|
||||
================================================================
|
||||
-->
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_segment_form_inherit">
|
||||
<field name="name">marketing.campaign.segment.form.inherit</field>
|
||||
<field name="model">marketing.campaign.segment</field>
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_activity_form_inherit">
|
||||
<field name="name">marketing.campaign.activity.form.inherit</field>
|
||||
<field name="model">marketing.campaign.activity</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="marketing_campaign.view_marketing_campaign_segment_form"/>
|
||||
<field name="inherit_id" ref="marketing_campaign.view_marketing_campaign_activity_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="date_done" position="after">
|
||||
<separator string="Mailchimp Synchronization" colspan="4"/>
|
||||
<field name="synchro"/>
|
||||
<group colspan="2" attrs="{'invisible':[('synchro','!=',True)]}">
|
||||
<field name="mailchimp_account_id" attrs="{'required':[('synchro','=',True)]}" domain="[('state','=','approved')]" on_change="onchange_mailchimp(mailchimp_account_id)"/>
|
||||
<field name="mailchimp_list" attrs="{'required':[('synchro','=',True)]}" on_change="onchange_mailchimp_list(mailchimp_account_id,mailchimp_list)"/>
|
||||
</group>
|
||||
<field name="type" position="after">
|
||||
<group colspan="2" ><!--attrs="{'invisible':[('type','!=','mailchimp')]}"-->
|
||||
<field name="mailchimp_account_id" attrs="{'required':[('type','=','mailchimp')]}" domain="[('state','=','approved')]" on_change="onchange_mailchimp(mailchimp_account_id)"/>
|
||||
<field name="mailchimp_list" attrs="{'required':[('type','=','mailchimp')]}" on_change="onchange_mailchimp_list(mailchimp_account_id,mailchimp_list)"/>
|
||||
</group>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_form_inherit">
|
||||
<field name="name">marketing.campaign.form.inherit</field>
|
||||
<field name="model">marketing.campaign</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="marketing_campaign.view_marketing_campaign_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="type" position="after">
|
||||
<group colspan="2" attrs="{'invisible':[('type','!=','mailchimp')]}">
|
||||
<field name="mailchimp_account_id" attrs="{'required':[('type','=','mailchimp')]}" domain="[('state','=','approved')]" on_change="onchange_mailchimp(mailchimp_account_id)"/>
|
||||
<field name="mailchimp_list" attrs="{'required':[('type','=','mailchimp')]}" on_change="onchange_mailchimp_list(mailchimp_account_id,mailchimp_list)"/>
|
||||
</group>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -35,9 +50,9 @@
|
|||
<menuitem name="Tools" id="base.menu_tools" icon="STOCK_PREFERENCES" sequence="15"/>
|
||||
<menuitem name="Mailchimps" id="menu_action_mailchimp" parent="base.menu_tools" />
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_mailchimp_account_tree">
|
||||
<field name="name">marketing.campaign.mailchimp.account.tree</field>
|
||||
<field name="model">marketing.campaign.mailchimp.account</field>
|
||||
<record model="ir.ui.view" id="view_mailchimp_account_tree">
|
||||
<field name="name">mailchimp.account.tree</field>
|
||||
<field name="model">mailchimp.account</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="All Accounts">
|
||||
|
@ -49,9 +64,9 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_marketing_campaign_mailchimp_account_form">
|
||||
<field name="name">marketing.campaign.mailchimp.account.form</field>
|
||||
<field name="model">marketing.campaign.mailchimp.account</field>
|
||||
<record model="ir.ui.view" id="view_mailchimp_account_form">
|
||||
<field name="name">mailchimp.account.form</field>
|
||||
<field name="model">mailchimp.account</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account">
|
||||
|
@ -71,16 +86,16 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_marketing_campaign_mailchimp_account">
|
||||
<record model="ir.actions.act_window" id="action_mailchimp_account">
|
||||
<field name="name">All Mailchimp Accounts</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">marketing.campaign.mailchimp.account</field>
|
||||
<field name="res_model">mailchimp.account</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_marketing_campaign_mailchimp_account_tree"/>
|
||||
<field name="view_id" ref="view_mailchimp_account_tree"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_action_marketing_campaign_mailchimp_account" parent="menu_action_mailchimp" action="action_marketing_campaign_mailchimp_account" sequence="40"/>
|
||||
<menuitem id="menu_action_mailchimp_account" parent="menu_action_mailchimp" action="action_mailchimp_account" sequence="40"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import create_list
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,64 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
import netsvc
|
||||
|
||||
class create_list(osv.osv_memory):
|
||||
_name = "create.list"
|
||||
_description = "Create List of mailchimp"
|
||||
# crm.lead remain
|
||||
_columns = {
|
||||
'mailchimp_account_id': fields.many2one('mailchimp.account',
|
||||
'Mailchimp Account', required=True),
|
||||
'mailchimp_list_id': fields.many2one('mailchimp.list', 'List'),
|
||||
'list_name': fields.char('Name',size = 64),
|
||||
'partner_ids': fields.many2many('res.partner',
|
||||
'create_list_partner_rel',
|
||||
'cust_list_id', 'partner_id',
|
||||
'Partner'),
|
||||
|
||||
}
|
||||
|
||||
def onchange_mailchimp_account_id(self, cr, uid, ids, mailchimp_account_id,
|
||||
action):
|
||||
print mailchimp_account_id,action,
|
||||
return {'value':{}}
|
||||
|
||||
def create_list(self, cr, uid, ids, context=None):
|
||||
create_list_obj = self.browse(cr, uid, ids[0])
|
||||
print create_list_obj.id
|
||||
mailchimp_account_obj = self.pool.get('mailchimp.account')
|
||||
account_id = create_list_obj.mailchimp_account_id
|
||||
lists = mailchimp_account_obj.get_response(cr, uid, account_id.id, 'lists')
|
||||
lists = dict([(l['name'],l['id']) for l in lists])
|
||||
print lists
|
||||
if create_list_obj.list_name not in lists.keys():
|
||||
raise osv.except_osv(_('UserError'),
|
||||
_('There is no list define in account %s') % (account_id.name))
|
||||
list_id = lists[create_list_obj.list_name]
|
||||
mailchimp_account_obj.add_partner_list(cr, uid, account_id.id, list_id,
|
||||
create_list_obj.partner_ids)
|
||||
return {}
|
||||
create_list()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,35 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<record id="view_create_list" model="ir.ui.view">
|
||||
<field name="name">create.list.form</field>
|
||||
<field name="model">create.list</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Update List">
|
||||
<field name="mailchimp_account_id" on_change = "onchange_mailchimp_account_id(mailchimp_account_id,action)"/>
|
||||
<field name="list_name" />
|
||||
<newline/>
|
||||
<separator string="Partner" colspan="4"/>
|
||||
<field name="partner_ids" nolabel="1" colspan="4"/>
|
||||
<!--group ">
|
||||
<field name="mailchimp_list_id" />
|
||||
</group-->
|
||||
<group col="4" colspan="4">
|
||||
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="create_list" string="Update" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_create_list" model="ir.actions.act_window">
|
||||
<field name="name">Update List</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">create.list</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_create_list"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
<menuitem id="menu_action_mailchimp_create_list" parent="menu_action_mailchimp" action="action_create_list" sequence="40"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -117,9 +117,9 @@ class mrp_bom(osv.osv):
|
|||
"""
|
||||
Defines bills of material for a product.
|
||||
"""
|
||||
_name = 'mrp.bom'
|
||||
_name = 'mrp.bom'
|
||||
_description = 'Bill of Material'
|
||||
|
||||
|
||||
def _child_compute(self, cr, uid, ids, name, arg, context={}):
|
||||
""" Gets child bom.
|
||||
@param self: The object pointer
|
||||
|
@ -140,14 +140,14 @@ class mrp_bom(osv.osv):
|
|||
bom_id = ids[0]
|
||||
bom_parent = bom_obj.browse(cr, uid, bom_id)
|
||||
for bom in self.browse(cr, uid, ids, context=context):
|
||||
if (bom_parent and bom_parent.multi_level_bom) or bom.id == bom_id:
|
||||
if (bom_parent) or (bom.id == bom_id):
|
||||
result[bom.id] = map(lambda x: x.id, bom.bom_lines)
|
||||
else:
|
||||
result[bom.id] = []
|
||||
if bom.bom_lines:
|
||||
continue
|
||||
ok = ((name=='child_complete_ids') and (bom.product_id.supply_method=='produce'))
|
||||
if (bom.type=='phantom' or ok) and bom_parent.multi_level_bom:
|
||||
if (bom.type=='phantom' or ok):
|
||||
sids = bom_obj.search(cr, uid, [('bom_id','=',False),('product_id','=',bom.product_id.id)])
|
||||
if sids:
|
||||
bom2 = bom_obj.browse(cr, uid, sids[0], context=context)
|
||||
|
@ -203,7 +203,6 @@ class mrp_bom(osv.osv):
|
|||
'revision_type': fields.selection([('numeric','numeric indices'),('alpha','alphabetical indices')], 'Index type'),
|
||||
'child_complete_ids': fields.function(_child_compute,relation='mrp.bom', method=True, string="BoM Hierarchy", type='many2many'),
|
||||
'company_id': fields.many2one('res.company','Company',required=True),
|
||||
'multi_level_bom': fields.boolean('Multi-level BoM'),
|
||||
}
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
|
@ -212,7 +211,6 @@ class mrp_bom(osv.osv):
|
|||
'product_rounding': lambda *a: 1.0,
|
||||
'type': lambda *a: 'normal',
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.bom', context=c),
|
||||
'multi_level_bom': lambda *a: 0,
|
||||
}
|
||||
_order = "sequence"
|
||||
_sql_constraints = [
|
||||
|
@ -247,7 +245,7 @@ class mrp_bom(osv.osv):
|
|||
v['name'] = prod.name
|
||||
return {'value': v}
|
||||
return {}
|
||||
|
||||
|
||||
def _bom_find(self, cr, uid, product_id, product_uom, properties=[]):
|
||||
""" Finds BoM for particular product and product uom.
|
||||
@param product_id: Selected product.
|
||||
|
@ -954,6 +952,3 @@ class mrp_production_product_line(osv.osv):
|
|||
}
|
||||
mrp_production_product_line()
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -252,21 +252,29 @@
|
|||
<field name="product_qty"/>
|
||||
<field name="routing_id" groups="base.group_extended"/>
|
||||
<newline/>
|
||||
<field name="product_uos" groups="product.group_uos,base.group_extended" widget="selection"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos,base.group_extended" />
|
||||
<field name="product_uos" groups="product.group_uos"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos" />
|
||||
<newline/>
|
||||
<field name="multi_level_bom"/>
|
||||
<field name="type" groups="base.group_extended"/>
|
||||
<field name="company_id" select="1" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
<notebook colspan="4" >
|
||||
<page string="Components" attrs="{'invisible': [('multi_level_bom','=',False)]}">
|
||||
<field colspan="4" name="bom_lines" nolabel="1" widget="one2many_list" />
|
||||
<page string="Components">
|
||||
<field colspan="4" name="bom_lines" nolabel="1" widget="one2many_list">
|
||||
<tree string="Components" editable="bottom">
|
||||
<field name="product_id" on_change="onchange_product_id(product_id, name)" select="1"/>
|
||||
<field name="product_uom"/>
|
||||
<field name="product_qty"/>
|
||||
<field name="name" invisible="1"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_stop"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Revisions" groups="base.group_extended" attrs="{'invisible': [('bom_id','!=',False),('multi_level_bom','=',False)]}">
|
||||
<page string="Revisions" groups="base.group_extended" attrs="{'invisible': [('bom_id','!=',False)]}">
|
||||
<field colspan="4" name="revision_ids" nolabel="1" widget="one2many_list"/>
|
||||
</page>
|
||||
<page string="Properties" groups="base.group_extended" attrs="{'invisible': [('bom_id','!=',False),('multi_level_bom','=',False)]}">
|
||||
<page string="Properties" groups="base.group_extended">
|
||||
<field name="position"/>
|
||||
<field name="active"/>
|
||||
<field name="sequence"/>
|
||||
|
@ -499,15 +507,15 @@
|
|||
<field name="product_id" on_change="product_id_change(product_id)"/>
|
||||
<field name="product_qty"/>
|
||||
<group colspan="2" col="3">
|
||||
<field name="product_uom" widget="selection"/>
|
||||
<field name="product_uom"/>
|
||||
<button type="action"
|
||||
name="%(mrp.action_change_production_qty)d"
|
||||
string="Change Qty" states="ready,confirmed" />
|
||||
</group>
|
||||
<label string="" colspan="2"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos,base.group_extended"/>
|
||||
<group colspan="2" col="3" groups="product.group_uos,base.group_extended">
|
||||
<field name="product_uos" widget="selection"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos"/>
|
||||
<group colspan="2" col="3" groups="product.group_uos">
|
||||
<field name="product_uos"/>
|
||||
<label string=""/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -800,8 +808,8 @@
|
|||
<field name="product_id"/>
|
||||
<field name="product_qty"/>
|
||||
<field name="product_uom"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos,base.group_extended"/>
|
||||
<field name="product_uos" groups="product.group_uos,base.group_extended"/>
|
||||
<field name="product_uos_qty" groups="product.group_uos"/>
|
||||
<field name="product_uos" groups="product.group_uos"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
|
|
@ -24,15 +24,17 @@ from tools.translate import _
|
|||
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = "product.product"
|
||||
|
||||
_inherit = "product.product"
|
||||
_columns = {
|
||||
"bom_ids": fields.one2many('mrp.bom', 'product_id','Bill of Materials'),
|
||||
}
|
||||
def do_change_standard_price(self, cr, uid, ids, datas, context={}):
|
||||
""" Changes the Standard Price of Product and parent products and creates an account move accordingly.
|
||||
@param datas: dict. contain default datas like new_price, stock_output_account, stock_input_account, stock_journal
|
||||
@param context: A standard dictionary
|
||||
@return:
|
||||
"""
|
||||
#TODO : TO Check
|
||||
@param context: A standard dictionary
|
||||
@return:
|
||||
"""
|
||||
#TODO : TO Check
|
||||
res = super(product_product, self).do_change_standard_price(cr, uid, ids, datas, context=context)
|
||||
bom_obj = self.pool.get('mrp.bom')
|
||||
def _compute_price(bom):
|
||||
|
@ -44,7 +46,7 @@ class product_product(osv.osv):
|
|||
price += bom_line.product_qty * prod_price
|
||||
|
||||
accounts = self.get_product_accounts(cr, uid, bom.bom_id.product_id.id, context)
|
||||
|
||||
|
||||
datas = {
|
||||
'new_price': price,
|
||||
'stock_output_account': accounts['stock_account_output'],
|
||||
|
@ -54,9 +56,9 @@ class product_product(osv.osv):
|
|||
super(product_product, self).do_change_standard_price(cr, uid, [bom.bom_id.product_id.id], datas, context)
|
||||
_compute_price(bom.bom_id)
|
||||
return price
|
||||
|
||||
|
||||
bom_ids = bom_obj.search(cr, uid, [('product_id', 'in', ids)])
|
||||
|
||||
|
||||
for bom in bom_obj.browse(cr, uid, bom_ids):
|
||||
_compute_price(bom)
|
||||
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
"access_mrp_workcenter","mrp.workcenter","model_mrp_workcenter","mrp.group_mrp_user",1,0,0,0
|
||||
"access_mrp_routing","mrp.routing","model_mrp_routing","mrp.group_mrp_user",1,0,0,0
|
||||
"access_mrp_routing_workcenter","mrp.routing.workcenter","model_mrp_routing_workcenter","mrp.group_mrp_user",1,0,0,0
|
||||
"access_mrp_bom","mrp.bom","model_mrp_bom","mrp.group_mrp_user",1,0,0,0
|
||||
"access_mrp_bom_revision","mrp.bom.revision","model_mrp_bom_revision","mrp.group_mrp_user",1,0,0,0
|
||||
"access_mrp_bom","mrp.bom","model_mrp_bom","group_mrp_user",1,0,0,0
|
||||
"access_mrp_bom_revision","mrp.bom.revision","model_mrp_bom_revision","group_mrp_user",1,0,0,0
|
||||
"access_mrp_production","mrp.production","model_mrp_production","mrp.group_mrp_user",1,1,1,1
|
||||
"access_mrp_production_workcenter_line","mrp.production.workcenter.line","model_mrp_production_workcenter_line","mrp.group_mrp_user",1,1,1,1
|
||||
"access_mrp_production_product_line","mrp.production.product.line","model_mrp_production_product_line","mrp.group_mrp_user",1,1,1,1
|
||||
|
|
|
|
@ -182,14 +182,14 @@
|
|||
-
|
||||
!python {model: procurement.order}: |
|
||||
from tools.translate import _
|
||||
proc_ids = self.search(cr, uid, [('state','!=','cofirmed')])
|
||||
proc_ids = self.search(cr, uid, [('state','!=','confirmed')])
|
||||
assert proc_ids, _('No Procurements!')
|
||||
-
|
||||
The scheduler runs.
|
||||
-
|
||||
!function {model: procurement.order, name: run_scheduler}:
|
||||
- model: procurement.order
|
||||
search: "[('state','!=','cofirmed')]"
|
||||
search: "[('state','!=','confirmed')]"
|
||||
-
|
||||
I am checking Internal picking. I see one picking for Orange juice and its
|
||||
stock moves for Oranges, Sugar and Water made correctly.
|
||||
|
@ -247,4 +247,4 @@
|
|||
picking_ids = pick_obj.search(cr, uid, [('type','=','in')])
|
||||
self.view_init(cr, uid, ['date','partner_id','address_id'],context={'active_ids': picking_ids})
|
||||
self.do_partial(cr, uid, [1], context={'active_ids': picking_ids})
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,439 @@
|
|||
# Hindi translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-06-14 08:48+0000\n"
|
||||
"Last-Translator: vir (Open ERP) <vir@tinyerp.com>\n"
|
||||
"Language-Team: Hindi <hi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,name:mrp_operations.process_node_startoperation0
|
||||
msgid "Start Operation"
|
||||
msgstr "ऑपरेशन प्रारंभ करें"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,state:0
|
||||
msgid "In Progress"
|
||||
msgstr "प्रगति में है"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: selection:mrp.production.workcenter.line,state:0
|
||||
#: selection:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Pause"
|
||||
msgstr "ठहरें (Pause)"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,note:mrp_operations.process_node_startoperation0
|
||||
msgid "Operation is started"
|
||||
msgstr "ऑपरेशन शुरू कर दिया है"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Information"
|
||||
msgstr "जानकारी"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,name:mrp_operations.process_transition_startcanceloperation0
|
||||
msgid "Start Cancel Operation"
|
||||
msgstr "आरंभ रद्द संचालन"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
msgid "In Production"
|
||||
msgstr "उत्पादन में"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_code_action
|
||||
msgid "Operations Code"
|
||||
msgstr "परिचालन संहिता"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.process,name:mrp_operations.process_process_mrpoperationprocess0
|
||||
msgid "Mrp Operation Process"
|
||||
msgstr "एमआरपी ऑपरेशन प्रक्रिया"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: field:mrp.production.workcenter.line,state:0
|
||||
#: field:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Status"
|
||||
msgstr "स्थिति"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,name:mrp_operations.process_transition_startdoneoperation0
|
||||
msgid "Start Done Operation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: selection:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Start"
|
||||
msgstr "प्रारंभ"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp_operations.operation,production_id:0
|
||||
msgid "Production"
|
||||
msgstr "उत्पादन"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp_operations.operation:0
|
||||
msgid "Calendar View"
|
||||
msgstr "कैलेंडर देखना"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,name:mrp_operations.process_node_workorder0
|
||||
msgid "Work Center"
|
||||
msgstr "कार्य केंद्र"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "कार्य की परिभाषा में मॉडल का नाम अमान्य है."
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_operation_action
|
||||
msgid "Work Order Events Using Bar Codes"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Set Draft"
|
||||
msgstr "Set as Draft"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_form
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Work Orders"
|
||||
msgstr "काम के आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_code_action
|
||||
msgid "Start - Stop Codes"
|
||||
msgstr "शुरू और बंद कोड"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,uom:0
|
||||
msgid "UOM"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp_operations.operation.code:0
|
||||
msgid "Production Operation Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,date_planned:0
|
||||
msgid "Scheduled Date"
|
||||
msgstr "अनुसूचित तिथि"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,note:mrp_operations.process_transition_productionstart0
|
||||
msgid "From production order, create the workorder"
|
||||
msgstr "उत्पादन से आदेश, कार्य आदेश बनाने के लिए"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Hours by Workcenter"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: help:mrp.production,allow_reorder:0
|
||||
msgid ""
|
||||
"Check this to be able to move independently all production orders, without "
|
||||
"moving dependent ones."
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_action
|
||||
msgid "All Work Orders"
|
||||
msgstr "सभी कार्य आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: rml:mrp.code.barcode:0
|
||||
msgid "("
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Product to Produce"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.report.xml,name:mrp_operations.report_wc_barcode
|
||||
msgid "Workcenters Barcode"
|
||||
msgstr "कार्य केंद्र बारकोड"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,note:mrp_operations.process_node_doneoperation0
|
||||
#: model:process.transition,note:mrp_operations.process_transition_startdoneoperation0
|
||||
msgid "Operation is done"
|
||||
msgstr "ऑपरेशन पूरा हो गया है"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Planned Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
msgid "Ready to Produce"
|
||||
msgstr "Ready to Produce"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: selection:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Cancel"
|
||||
msgstr "रद्द करना"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: selection:mrp.production.workcenter.line,state:0
|
||||
msgid "Finished"
|
||||
msgstr "समाप्त"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production,allow_reorder:0
|
||||
msgid "Free Serialisation"
|
||||
msgstr "नि: शुल्क Serialisation"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_action_planning
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_draft_action_planning
|
||||
msgid "Work Orders Planning"
|
||||
msgstr "कार्य योजना के आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,name:mrp_operations.process_node_productionorder0
|
||||
msgid "Production Order"
|
||||
msgstr "उत्पादन के आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,note:mrp_operations.process_node_productionorder0
|
||||
msgid "Production order for any products"
|
||||
msgstr "किसी भी उत्पाद के लिए उत्पादन के आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:stock.move,move_dest_id_lines:0
|
||||
msgid "Children Moves"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp_operations.operation.code,name:0
|
||||
msgid "Operation Name"
|
||||
msgstr "संचालन नाम"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.model,name:mrp_operations.model_mrp_operations_operation
|
||||
msgid "mrp_operations.operation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,date_finnished:0
|
||||
#: field:mrp.production.workcenter.line,date_planned_end:0
|
||||
#: field:mrp_operations.operation,date_finished:0
|
||||
msgid "End Date"
|
||||
msgstr "आखिरी दिनांक"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "संरचना देखने के लिए अमान्य XML!"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Real"
|
||||
msgstr "वास्तविक"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.module.module,shortdesc:mrp_operations.module_meta_information
|
||||
msgid "Workcenter Production start end workflow"
|
||||
msgstr "Workcenter उत्पादन आरंभ और अंत कार्यप्रवाह"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: help:mrp.production.workcenter.line,delay:0
|
||||
msgid "This is delay between operation start and stop in this workcenter"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,product:0
|
||||
msgid "Product"
|
||||
msgstr "उत्पाद"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,note:mrp_operations.process_transition_workstartoperation0
|
||||
msgid "From work order, define the cycles and hour for creating product"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,delay:0
|
||||
msgid "Working Hours"
|
||||
msgstr "कार्य घंटे"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_draft_action
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_draft_action
|
||||
msgid "Future Work Orders"
|
||||
msgstr "भविष्य के कार्य आदेश"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,production_state:0
|
||||
msgid "Prod.State"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp_operations.operation,order_date:0
|
||||
msgid "Order Date"
|
||||
msgstr "आदेश की तिथि"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,note:mrp_operations.process_node_workorder0
|
||||
msgid "Production Work Center"
|
||||
msgstr "उत्पादन कार्य केंद्र"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,name:mrp_operations.process_transition_productionstart0
|
||||
msgid "Production start Operation"
|
||||
msgstr "उत्पादन ऑपरेशन शुरू"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
msgid "Packing Exception"
|
||||
msgstr "पैकिंग अपवाद"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp_operations.operation,workcenter_id:0
|
||||
msgid "Workcenter"
|
||||
msgstr "Work center"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,date_start:0
|
||||
#: field:mrp.production.workcenter.line,date_start_date:0
|
||||
#: field:mrp_operations.operation,date_start:0
|
||||
msgid "Start Date"
|
||||
msgstr "प्रारंभ दिनांक"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.model,name:mrp_operations.model_mrp_operations_operation_code
|
||||
msgid "mrp_operations.operation.code"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_operation_action
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Operations"
|
||||
msgstr "संचालन"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp_operations.operation,code_id:0
|
||||
#: field:mrp_operations.operation.code,code:0
|
||||
msgid "Code"
|
||||
msgstr "कोड"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.act_window,name:mrp_operations.mrp_production_wc_confirm_action
|
||||
msgid "Confirmed Work Orders"
|
||||
msgstr "काम के आदेश की पुष्टि की"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.ui.menu,name:mrp_operations.menu_mrp_production_wc_confirm_action
|
||||
msgid "Work Orders to Do"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,name:mrp_operations.process_node_canceloperation0
|
||||
msgid "Cancel Operation"
|
||||
msgstr "संचालन रद्द"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.transition,name:mrp_operations.process_transition_workstartoperation0
|
||||
msgid "Work start Operation"
|
||||
msgstr "कार्य संचालन शुरू"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:ir.actions.report.xml,name:mrp_operations.report_code_barcode
|
||||
msgid "Start/Stop Barcode"
|
||||
msgstr "शुरू /बंद बारकोड"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
#: selection:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Resume"
|
||||
msgstr "पुनरारंभ"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,name:mrp_operations.process_node_doneoperation0
|
||||
msgid "Done Operation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: field:mrp.production.workcenter.line,qty:0
|
||||
msgid "Qty"
|
||||
msgstr "मात्रा"
|
||||
|
||||
#. module: mrp_operations
|
||||
#: rml:mrp.code.barcode:0
|
||||
msgid ")"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp_operations.operation:0
|
||||
msgid "Production Operation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
#: selection:mrp_operations.operation.code,start_stop:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
msgid "Waiting Goods"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
#: selection:mrp.production.workcenter.line,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: model:process.node,note:mrp_operations.process_node_canceloperation0
|
||||
#: model:process.transition,note:mrp_operations.process_transition_startcanceloperation0
|
||||
msgid "Operation is cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: selection:mrp.production.workcenter.line,production_state:0
|
||||
#: selection:mrp.production.workcenter.line,state:0
|
||||
msgid "Canceled"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_operations
|
||||
#: view:mrp.production.workcenter.line:0
|
||||
msgid "Start working"
|
||||
msgstr ""
|
|
@ -0,0 +1,669 @@
|
|||
# Hindi translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 06:37+0000\n"
|
||||
"Last-Translator: vir (Open ERP) <vir@tinyerp.com>\n"
|
||||
"Language-Team: Hindi <hi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Fees Line"
|
||||
msgstr "मुक्त लाइन"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,repair_id:0
|
||||
#: field:mrp.repair.line,repair_id:0
|
||||
msgid "Repair Order Ref"
|
||||
msgstr "मरम्मत के आदेश संदर्भ"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,move_id:0
|
||||
msgid "Inventory Move"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr "कार्य की परिभाषा में मॉडल का नाम अमान्य है."
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Untaxed amount"
|
||||
msgstr "कर राशि के बिना"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,state:0
|
||||
msgid "Repair State"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Printing Date"
|
||||
msgstr "मुद्रण दिनांक"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,product_uom_qty:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Quantity"
|
||||
msgstr "मात्रा"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Set to Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
msgid "Invoice Exception"
|
||||
msgstr "चालान अपवाद"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,address_id:0
|
||||
msgid "Delivery Address"
|
||||
msgstr "वितरण पता"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Make Invoice"
|
||||
msgstr "चालान बनाएँ"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,price_subtotal:0
|
||||
#: field:mrp.repair.line,price_subtotal:0
|
||||
msgid "Subtotal"
|
||||
msgstr "उप कुल"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Invoice address :"
|
||||
msgstr "चालान पता"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,guarantee_limit:0
|
||||
msgid "Guarantee limit"
|
||||
msgstr "गारंटी की सीमा"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,amount_tax:0
|
||||
#: field:mrp.repair.fee,tax_id:0
|
||||
#: field:mrp.repair.line,tax_id:0
|
||||
msgid "Taxes"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Net Total :"
|
||||
msgstr "नेट कुल:"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "VAT"
|
||||
msgstr "वैट"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Operations"
|
||||
msgstr "संचालन"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,move_id:0
|
||||
msgid "Move"
|
||||
msgstr "स्थानान्तर"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_tree
|
||||
msgid "Repair Orders"
|
||||
msgstr "मरम्मत के आदेश"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.report.xml,name:mrp_repair.report_mrp_repair
|
||||
msgid "Quotation / Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Extra Info"
|
||||
msgstr "अतिरिक्त जानकारी"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,partner_id:0
|
||||
msgid "Partner"
|
||||
msgstr "साथी"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_quotation_tree
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_quotation
|
||||
msgid "Repairs in quotation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
#: selection:mrp.repair.line,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr "पुष्टि"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Recreate Invoice"
|
||||
msgstr "फिर से चालान बनाने"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Repairs order"
|
||||
msgstr "मरम्मत के आदेश"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Repair Order N° :"
|
||||
msgstr "मरम्मत के आदेश N °:"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,prodlot_id:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Lot Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
msgid "Under Repair"
|
||||
msgstr "मरम्मत के तहत"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,fees_lines:0
|
||||
msgid "Fees Lines"
|
||||
msgstr "फीस लाइन्स"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.model,name:mrp_repair.model_mrp_repair_fee
|
||||
msgid "Repair Fees line"
|
||||
msgstr "मरम्मत शुल्क लाइन"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Fees Line(s)"
|
||||
msgstr "फीस लाइन (ओं)"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
msgid "To be Invoiced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Shipping address :"
|
||||
msgstr "शिपिंग का पता"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Start Repair"
|
||||
msgstr "मरम्मत शुरू"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,product_uom_qty:0
|
||||
msgid "Quantity (UoM)"
|
||||
msgstr "मात्रा (UoM)"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,to_invoice:0
|
||||
#: field:mrp.repair.line,to_invoice:0
|
||||
msgid "To Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_order
|
||||
msgid "Repairs"
|
||||
msgstr "मरम्मत"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,picking_id:0
|
||||
msgid "Packing"
|
||||
msgstr "पैकिंग"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Total :"
|
||||
msgstr "कुल:"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,pricelist_id:0
|
||||
msgid "Pricelist"
|
||||
msgstr "मूल्य सूची"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,state:0
|
||||
msgid "Gives the state of the Repair Order"
|
||||
msgstr "मरम्मत के आदेश की स्थिति देना"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
#: field:mrp.repair,quotation_notes:0
|
||||
msgid "Quotation Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_progress_tree
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_progress
|
||||
msgid "Repairs in progress"
|
||||
msgstr "मरम्मत में प्रगति"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "संरचना देखने के लिए अमान्य XML!"
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,guarantee_limit:0
|
||||
msgid ""
|
||||
"The garantee limit is computed as: last move date + warranty defined on "
|
||||
"selected product. If the current date is below the garantee limit, each "
|
||||
"operation and fee you will add will be set as 'not to invoiced' by default. "
|
||||
"Note that you can change manually afterwards."
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Repair Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "N° :"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,invoice_method:0
|
||||
msgid "Invoice Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,repaired:0
|
||||
msgid "Repaired"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_field:mrp.repair.make_invoice,init,group:0
|
||||
msgid "Group by partner invoice address"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,invoice_line_id:0
|
||||
#: field:mrp.repair.line,invoice_line_id:0
|
||||
msgid "Invoice Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Total amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair.line,state:0
|
||||
msgid "Canceled"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,invoice_method:0
|
||||
msgid "Before Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,location_id:0
|
||||
msgid "Current Location"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_button:mrp.repair.cancel,display,yes:0
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,invoiced:0
|
||||
#: field:mrp.repair.fee,invoiced:0
|
||||
#: field:mrp.repair.line,invoiced:0
|
||||
msgid "Invoiced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_button:mrp.repair.cancel,display,end:0
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_view:mrp.repair.make_invoice,init:0
|
||||
#: wizard_button:mrp.repair.make_invoice,init,invoice:0
|
||||
msgid "Create invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair.line,type:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair.line,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_order_form
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_form
|
||||
msgid "New Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: constraint:ir.model:0
|
||||
msgid ""
|
||||
"The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,amount_untaxed:0
|
||||
msgid "Untaxed Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Guarantee Limit"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,product_id:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Product to Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,pricelist_id:0
|
||||
msgid "The pricelist comes from the selected partner, by default."
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_view:mrp.repair.cancel,display:0
|
||||
msgid ""
|
||||
"This operation will cancel the Repair process, but will not cancel it's "
|
||||
"Invoice. Do you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
msgid "Quotation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Compute"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Confirm Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Repair Quotation"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "End Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.model,name:mrp_repair.model_mrp_repair
|
||||
msgid "Repairs Order"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_ready_tree
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_ready
|
||||
msgid "Repairs Ready to Start"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Qty"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
#: selection:mrp.repair.line,state:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.act_window,name:mrp_repair.action_repair_2binvoiced_tree
|
||||
#: model:ir.ui.menu,name:mrp_repair.menu_repair_2binvoiced
|
||||
msgid "Repairs to be invoiced"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,invoice_id:0
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Fees"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
#: wizard_button:mrp.repair.make_invoice,init,end:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,location_dest_id:0
|
||||
msgid "Dest. Location"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Operation Line(s)"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.model,name:mrp_repair.model_mrp_repair_line
|
||||
msgid "Repair Operations Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,location_dest_id:0
|
||||
msgid "Delivery Location"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.module.module,shortdesc:mrp_repair.module_meta_information
|
||||
msgid "Products Repairs Module"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,invoice_method:0
|
||||
msgid ""
|
||||
"This field allow you to change the workflow of the repair order. If value "
|
||||
"selected is different from 'No Invoice', it also allow you to select the "
|
||||
"pricelist and invoicing address."
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,price_unit:0
|
||||
#: field:mrp.repair.line,price_unit:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Unit Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_view:mrp.repair.make_invoice,init:0
|
||||
msgid "Do you really want to create the invoices ?"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,name:0
|
||||
#: field:mrp.repair.line,name:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,operations:0
|
||||
msgid "Operation Lines"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,product_id:0
|
||||
#: field:mrp.repair.line,product_id:0
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Invoice Corrected"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,deliver_bool:0
|
||||
msgid ""
|
||||
"Check this box if you want to manage the delivery once the product is "
|
||||
"repaired. If cheked, it will create a packing with selected product. Note "
|
||||
"that you can select the locations in the Info tab, if you have the extended "
|
||||
"view."
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,type:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Price"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,deliver_bool:0
|
||||
msgid "Deliver"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
#: field:mrp.repair,internal_notes:0
|
||||
msgid "Internal Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: rml:repair.order:0
|
||||
msgid "Taxes:"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.wizard,name:mrp_repair.wizard_mrp_repair_make_invoice
|
||||
msgid "Make invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,name:0
|
||||
msgid "Repair Ref"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "UoM"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair.line,type:0
|
||||
#: rml:repair.order:0
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: wizard_view:mrp.repair.cancel,display:0
|
||||
msgid "Cancel Repair...??"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.fee,product_uom:0
|
||||
#: field:mrp.repair.line,product_uom:0
|
||||
msgid "Product UoM"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,partner_invoice_id:0
|
||||
msgid "Invoicing Address"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,invoice_method:0
|
||||
msgid "After Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Invoicing"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair.line,location_id:0
|
||||
msgid "Source Location"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Quality"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: model:ir.actions.wizard,name:mrp_repair.action_cancel_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "Cancel Repair"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,invoice_method:0
|
||||
msgid "No Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: view:mrp.repair:0
|
||||
msgid "States"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: help:mrp.repair,partner_id:0
|
||||
msgid ""
|
||||
"This field allow you to choose the parner that will be invoiced and delivered"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: field:mrp.repair,amount_total:0
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: mrp_repair
|
||||
#: selection:mrp.repair,state:0
|
||||
msgid "Ready to Repair"
|
||||
msgstr ""
|
|
@ -8,13 +8,13 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-12-08 11:46+0000\n"
|
||||
"PO-Revision-Date: 2010-01-26 11:01+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2010-06-15 12:42+0000\n"
|
||||
"Last-Translator: Rinux <Unknown>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-17 04:21+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: multi_company
|
||||
|
@ -70,7 +70,7 @@ msgstr ""
|
|||
#: model:ir.module.module,shortdesc:multi_company.module_meta_information
|
||||
#: view:multi_company.default:0
|
||||
msgid "Multi Company"
|
||||
msgstr ""
|
||||
msgstr "Multi Azienda"
|
||||
|
||||
#. module: multi_company
|
||||
#: model:ir.module.module,description:multi_company.module_meta_information
|
||||
|
@ -133,17 +133,17 @@ msgstr ""
|
|||
#. module: multi_company
|
||||
#: model:ir.model,name:multi_company.model_multi_company_default
|
||||
msgid "multi_company.default"
|
||||
msgstr ""
|
||||
msgstr "multi_azienda.default"
|
||||
|
||||
#. module: multi_company
|
||||
#: help:multi_company.default,company_id:0
|
||||
msgid "Company where the user is connected"
|
||||
msgstr ""
|
||||
msgstr "Azienda con la quale l'utente è connesso"
|
||||
|
||||
#. module: multi_company
|
||||
#: model:ir.actions.act_window,name:multi_company.action_inventory_form
|
||||
msgid "Default Company per Object"
|
||||
msgstr ""
|
||||
msgstr "Azienda Predefinita per Oggetto"
|
||||
|
||||
#. module: multi_company
|
||||
#: field:multi_company.default,expression:0
|
||||
|
@ -173,12 +173,12 @@ msgstr ""
|
|||
#. module: multi_company
|
||||
#: help:multi_company.default,expression:0
|
||||
msgid "Expression, must be True to match"
|
||||
msgstr ""
|
||||
msgstr "Espressione, deve essere Vero per corrispondere"
|
||||
|
||||
#. module: multi_company
|
||||
#: model:ir.ui.menu,name:multi_company.menu_action_inventory_form
|
||||
msgid "Default company per Object"
|
||||
msgstr ""
|
||||
msgstr "Azienda predefinitaa per Oggetto"
|
||||
|
||||
#. module: multi_company
|
||||
#: code:addons/multi_company/multi_company.py:0
|
||||
|
|
|
@ -66,6 +66,7 @@ Main features :
|
|||
'pos_report.xml',
|
||||
# 'pos_wizard.xml',
|
||||
'pos_view.xml',
|
||||
'report/report_pos_order_view.xml',
|
||||
'pos_sequence.xml',
|
||||
'posrule_data.xml',
|
||||
'pos_data.xml',
|
||||
|
|
|
@ -246,6 +246,9 @@ class account_bank_statement(osv.osv):
|
|||
self.write(cr, uid, statement.id, {'balance_end_real':Decimal(str(val_statement_line))+Decimal(str(val2)),'closing_date':time.strftime("%Y-%m-%d %H:%M:%S"),'state':'draft'})
|
||||
# self.write(cr, uid, statement.id, {'balance_end_real':bal_st+val_statement_line,'closing_date':time.strftime("%Y-%m-%d %H:%M:%S"),'state':'draft'})
|
||||
return super(account_bank_statement, self).button_confirm(cr, uid, ids, context=None)
|
||||
|
||||
def button_cancel(self, cr, uid, ids, context={}):
|
||||
self.write(cr, uid, ids, {'state':'draft'}, context=context)
|
||||
|
||||
account_bank_statement()
|
||||
|
||||
|
|
|
@ -37,5 +37,6 @@ import pos_sales_user_today_current_user
|
|||
import pos_receipt_with_remboursment
|
||||
import pos_receipt_without_remboursment
|
||||
import point_of_sale_report
|
||||
import report_pos_order
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import tools
|
||||
from osv import fields,osv
|
||||
|
||||
class report_pos_order(osv.osv):
|
||||
_name = "report.pos.order"
|
||||
_description = "Point of Sale Orders Statistics"
|
||||
_auto = False
|
||||
_columns ={
|
||||
'date': fields.date('Date Order', readonly=True),
|
||||
'date_validation': fields.date('Date Confirm', readonly=True),
|
||||
'date_payment': fields.date('Date Confirm', readonly=True),
|
||||
'year': fields.char('Year', size=4, 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=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'),
|
||||
'user_id':fields.many2one('res.users', 'Salesman', readonly=True),
|
||||
'price_total':fields.float('Total Price', readonly=True),
|
||||
'shop_id':fields.many2one('sale.shop', 'Shop', readonly=True),
|
||||
'company_id':fields.many2one('res.company', 'Company', readonly=True),
|
||||
'nbr':fields.integer('# of Lines', readonly=True),
|
||||
'product_qty':fields.float('# of Qty', readonly=True),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal'),
|
||||
}
|
||||
_order = 'date desc'
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'report_pos_order')
|
||||
cr.execute("""
|
||||
create or replace view report_pos_order as (
|
||||
select el.*,
|
||||
|
||||
(select 1) as nbr,
|
||||
to_date(to_char(po.date_order, 'dd-MM-YYYY'),'dd-MM-YYYY') as date,
|
||||
po.date_validation as date_validation,
|
||||
po.date_payment as date_payment,
|
||||
to_char(po.date_order, 'YYYY') as year,
|
||||
to_char(po.date_order, 'MM') as month,
|
||||
to_char(po.date_order, 'YYYY-MM-DD') as day,
|
||||
po.partner_id as partner_id,
|
||||
po.state as state,
|
||||
po.user_id as user_id,
|
||||
po.shop_id as shop_id,
|
||||
po.company_id as company_id,
|
||||
po.sale_journal as journal_id
|
||||
|
||||
from
|
||||
pos_order as po,
|
||||
( select pl.id as id,
|
||||
pl.product_id as product_id,
|
||||
pl.qty as product_qty,
|
||||
sum(pl.qty * pl.price_unit)- sum(pl.qty * pl.price_ded) as price_total,
|
||||
pl.order_id
|
||||
from
|
||||
pos_order_line as pl
|
||||
left join product_template pt on (pt.id=pl.product_id)
|
||||
group by
|
||||
pl.id,pl.order_id, pl.qty,pl.product_id) el
|
||||
where po.id = el.order_id
|
||||
)
|
||||
""")
|
||||
|
||||
report_pos_order()
|
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_report_pos_order_tree" model="ir.ui.view">
|
||||
<field name="name">report.pos.order.tree</field>
|
||||
<field name="model">report.pos.order</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Point of Sale Analysis">
|
||||
<field name="date" />
|
||||
<field name="date_validation" invisible="1"/>
|
||||
<field name="date_payment" invisible="1"/>
|
||||
<field name="user_id" invisible="1"/>
|
||||
<field name="year" invisible="1"/>
|
||||
<field name="day" invisible="1"/>
|
||||
<field name="month" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="product_id" invisible="1"/>
|
||||
<field name="shop_id" invisible="1"/>
|
||||
<field name="journal_id" invisible="1"/>
|
||||
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
||||
<field name="nbr" sum="# of Lines"/>
|
||||
<field name="product_qty" sum="# of Qty"/>
|
||||
<field name="price_total" sum="Total Price"/>
|
||||
<field name="state" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_report_pos_order_search" model="ir.ui.view">
|
||||
<field name="name">report.pos.order.search</field>
|
||||
<field name="model">report.pos.order</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Point of Sale Analysis">
|
||||
<group>
|
||||
<filter icon="terp-go-year" string=" 365 Days "
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="POS ordered created last 365 days"/>
|
||||
<filter icon="terp-go-month" string=" 30 Days "
|
||||
name="month"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="POS ordered created in last 30 days"/>
|
||||
<filter icon="terp-go-week"
|
||||
string=" 7 Days "
|
||||
separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="POS ordered created last 7 days"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-document-new"
|
||||
string="Draft"
|
||||
domain="[('state','=','draft')]"/>
|
||||
<filter icon="terp-dolar"
|
||||
string="Paid"
|
||||
domain="[('state','=',('paid'))]"/>
|
||||
<filter icon="terp-dolar"
|
||||
string="Invoiced"
|
||||
domain="[('state','=',('invoiced'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id" widget="selection">
|
||||
<filter icon="terp-dolar"
|
||||
string="My Sales"
|
||||
help="My Sales"
|
||||
domain="[('user_id','=',uid)]"/>
|
||||
</field>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="10" col="12">
|
||||
<filter string="Salesman" icon="terp-personal" name="User" context="{'group_by':'user_id'}"/>
|
||||
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Journal" icon="terp-folder-orange" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="Shop" icon="terp-go-home" context="{'group_by':'shop_id'}"/>
|
||||
<filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-month" context="{'group_by':'day'}"/>
|
||||
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_pos_order_all" model="ir.actions.act_window">
|
||||
<field name="name">Point of Sale Analysis</field>
|
||||
<field name="res_model">report.pos.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="search_view_id" ref="view_report_pos_order_search"/>
|
||||
<field name="context">{'search_default_month':1,'search_default_User':1}</field>
|
||||
</record>
|
||||
|
||||
<menuitem action="action_report_pos_order_all" id="menu_report_pos_order_all" parent="menu_point_rep" sequence="1"/>
|
||||
</data>
|
||||
</openerp>
|
|
@ -37,3 +37,5 @@
|
|||
"access_pos_make_payment","pos.make.payment","model_pos_make_payment","point_of_sale.group_pos_user",1,0,0,0
|
||||
"access_pos_scan_product","pos.scan.product","model_pos_scan_product","point_of_sale.group_pos_user",1,0,0,0
|
||||
"access_pos_payment_report","pos.payment.report","model_pos_payment_report","point_of_sale.group_pos_user",1,0,0,0
|
||||
"access_report_pos_order","report.pos.order","model_report_pos_order","point_of_sale.group_pos_user",1,0,0,0
|
||||
"access_pos_return","pos.return","model_pos_return","point_of_sale.group_pos_user",1,0,0,0
|
||||
|
|
|
|
@ -24,7 +24,7 @@
|
|||
<field name="model">account.bank.statement</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="red:balance_end_real!=balance_end;blue:state=='draft' and (balance_end_real==balance_end)" string="Statement">
|
||||
<tree colors="red:balance_end_real!=balance_end;blue:state=='draft' and (balance_end_real==balance_end);black:state in ('open');blue:state in ('draft')" string="Statement">
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
|
@ -34,6 +34,9 @@
|
|||
<field name="balance_end"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
<button type="object" string="Open" name="button_open" states="draft" icon="terp-camera_test"/>
|
||||
<button type="object" string="Confirm" name="button_confirm" states="open" icon="terp-gtk-go-back-rtl"/>
|
||||
<button type="object" string="Cancel" name="button_cancel" states="confirm" icon="terp-gtk-stop"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -349,11 +352,43 @@
|
|||
|
||||
<menuitem action="action_bank_statement_treenew" id="menu_statement_tree2" parent="menu_statement_tree_all" sequence="1"/>
|
||||
|
||||
<record id="view_account_bank_statment_filter" model="ir.ui.view">
|
||||
<field name="name">account.bank.statment.select</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Cashbox">
|
||||
<group col='9' colspan='4'>
|
||||
<filter icon="terp-camera_test" string="Open"
|
||||
domain="[('state','=','open')]"
|
||||
help="All open cashboxes"/>
|
||||
<filter icon="terp-dialog-close" string="To Close"
|
||||
domain="[('state','=','draft')]"
|
||||
help="All cashboxes to close"/>
|
||||
<filter icon="terp-go-today" name="Today" string="Today"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d 23:59:59'))]"
|
||||
help="All cashboxes to opened today"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="20">
|
||||
<filter string="Journal" icon="terp-folder-blue" domain="[]" context="{'group_by':'journal_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_pos_account_bank_statment">
|
||||
<field name="name">All Cashboxes</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">account.bank.statement</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" eval="False"/>
|
||||
<field name="context">{'search_default_Today':1}</field>
|
||||
<field name="search_view_id" ref="view_account_bank_statment_filter"/>
|
||||
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="act_statement_a1">
|
||||
<field name="sequence" eval="1"/>
|
||||
|
@ -367,7 +402,7 @@
|
|||
<field name="view_id" ref="view_bank_statement_form3"/>
|
||||
<field name="act_window_id" ref="action_pos_account_bank_statment"/>
|
||||
</record>
|
||||
<menuitem name="All Cashboxes" parent="menu_point_report_register"
|
||||
<menuitem name="All Cashboxes" parent="menu_statement_tree_all"
|
||||
action="action_pos_account_bank_statment" id="menu_pos_bank_statment_tree" groups="base.group_extended" sequence="4"/>
|
||||
|
||||
<record model="ir.actions.act_window" id="action_my_all_pos_account_bank_statment">
|
||||
|
@ -414,8 +449,8 @@
|
|||
<field name="act_window_id" ref="action_cashboxes_to_close"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Cashboxes to Close" parent="menu_pos_bank_statment_tree"
|
||||
action="action_cashboxes_to_close" id="menu_cashboxes_to_close_tree" groups="base.group_extended"/>
|
||||
<!-- <menuitem name="Cashboxes to Close" parent="menu_statement_tree_all"-->
|
||||
<!-- action="action_cashboxes_to_close" id="menu_cashboxes_to_close_tree" groups="base.group_extended"/>-->
|
||||
|
||||
|
||||
<menuitem
|
||||
|
|
|
@ -37,7 +37,9 @@ class procurement_order(osv.osv):
|
|||
context = {}
|
||||
|
||||
if use_new_cursor:
|
||||
print 'Cursor New', cr,
|
||||
cr = pooler.get_db(use_new_cursor).cursor()
|
||||
print cr
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
|
||||
procurement_obj = self.pool.get('procurement.order')
|
||||
|
@ -122,6 +124,7 @@ class procurement_order(osv.osv):
|
|||
})
|
||||
if use_new_cursor:
|
||||
cr.commit()
|
||||
print 'Cursor Close', cr
|
||||
cr.close()
|
||||
return {}
|
||||
|
||||
|
@ -172,7 +175,9 @@ class procurement_order(osv.osv):
|
|||
if not context:
|
||||
context = {}
|
||||
if use_new_cursor:
|
||||
print 'Cursor New', cr,
|
||||
cr = pooler.get_db(use_new_cursor).cursor()
|
||||
print cr
|
||||
orderpoint_obj = self.pool.get('stock.warehouse.orderpoint')
|
||||
location_obj = self.pool.get('stock.location')
|
||||
procurement_obj = self.pool.get('procurement.order')
|
||||
|
@ -236,6 +241,7 @@ class procurement_order(osv.osv):
|
|||
})
|
||||
if use_new_cursor:
|
||||
cr.commit()
|
||||
print 'Cursor Close', cr
|
||||
cr.close()
|
||||
return {}
|
||||
procurement_order()
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_property","mrp.property","model_mrp_property",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_property_group","mrp.property.group","model_mrp_property_group",,1,0,0,0
|
||||
"access_mrp_property","mrp.property","model_mrp_property",,1,0,0,0
|
||||
"access_procurement","procurement.order","model_procurement_order",,1,0,0,0
|
||||
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint",,1,0,0,0
|
||||
"access_procurement_compute_all","procurement.order.compute.all","model_procurement_order_compute_all",,1,0,0,0
|
||||
"access_procurement_orderpoint_compute","procurement.orderpoint.compute","model_procurement_orderpoint_compute",,1,0,0,0
|
||||
"access_mrp_make_procurement","make.procurement","model_make_procurement",,1,0,0,0
|
||||
"access_mrp_make_procurement","procurement.order.compute","model_procurement_order_compute",,1,0,0,0
|
||||
"access_mrp_property","mrp.property","model_mrp_property",base.group_user,1,0,0,0
|
||||
"access_procurement","procurement.order","model_procurement_order",base.group_user,1,0,0,0
|
||||
"access_stock_warehouse_orderpoint","stock.warehouse.orderpoint","model_stock_warehouse_orderpoint",stock.group_stock_manager,1,1,1,1
|
||||
"access_procurement_compute_all","procurement.order.compute.all","model_procurement_order_compute_all",stock.group_stock_manager,1,1,1,1
|
||||
"access_procurement_orderpoint_compute","procurement.orderpoint.compute","model_procurement_orderpoint_compute",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_make_procurement","make.procurement","model_make_procurement",stock.group_stock_manager,1,1,1,1
|
||||
"access_mrp_make_procurement","procurement.order.compute","model_procurement_order_compute",stock.group_stock_manager,1,1,1,1
|
||||
|
|
|
|
@ -31,7 +31,8 @@ class procurement_compute(osv.osv_memory):
|
|||
proc_obj = self.pool.get('procurement.order')
|
||||
proc_obj._procure_confirm(cr, uid, use_new_cursor=cr.dbname, context=context)
|
||||
finally:
|
||||
cr.close()
|
||||
pass
|
||||
#cr.close()
|
||||
return {}
|
||||
|
||||
def procure_calculation(self, cr, uid, ids, context):
|
||||
|
|
|
@ -45,10 +45,12 @@ class procurement_compute_all(osv.osv_memory):
|
|||
"""
|
||||
proc_obj = self.pool.get('procurement.order')
|
||||
for proc in self.browse(cr, uid, ids):
|
||||
print 'Cursor', cr
|
||||
proc_obj.run_scheduler(cr, uid, automatic=proc.automatic, use_new_cursor=cr.dbname,\
|
||||
context=context)
|
||||
print 'Cursor', cr
|
||||
return {}
|
||||
|
||||
|
||||
def procure_calculation(self, cr, uid, ids, context):
|
||||
"""
|
||||
@param self: The object pointer.
|
||||
|
|
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: product
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
<field name="name"/>
|
||||
<field name="categ_id" invisible="1"/>
|
||||
<field name="variants" groups="product.group_product_variant"/>
|
||||
<field name="uom_id"/>
|
||||
<field name="uom_id" string="UoM"/>
|
||||
<field name="type"/>
|
||||
<field name="qty_available"/>
|
||||
<field name="virtual_available"/>
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import product_expiry
|
||||
import wizard
|
||||
import report
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
{
|
||||
"name" : "Products date of expiry",
|
||||
"version" : "1.0",
|
||||
"author" : "Tiny",
|
||||
"category" : "Enterprise Specific Modules/Food Industries",
|
||||
"depends" : ["base", "account", "product", "stock"],
|
||||
"init_xml" : [],
|
||||
"demo_xml" : ["product_expiry_demo.xml"],
|
||||
"description": '''Track different dates on products and production lots:
|
||||
- end of life
|
||||
- best before date
|
||||
- removal date
|
||||
- alert date
|
||||
Used, for example, in food industries.''',
|
||||
"update_xml" : ["product_expiry_view.xml", "report/report_stock_view.xml", "wizard/stock_partial_view.xml"],
|
||||
"active": False,
|
||||
"installable": True
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,180 @@
|
|||
# Catalan translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-06-30 15:09+0000\n"
|
||||
"PO-Revision-Date: 2010-01-10 22:56+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Catalan <ca@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-05-21 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,life_time:0
|
||||
msgid "Product lifetime"
|
||||
msgstr "Cicle de vida producte"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_from_product_template
|
||||
msgid "Ham"
|
||||
msgstr "Pernil"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_lait_product_template
|
||||
msgid "Cow milk"
|
||||
msgstr "Llet de vaca"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
|
||||
msgid "Products date of expiry"
|
||||
msgstr "Data de caducitat de productes"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
"Error: La UdM per defecte i la UdM de compra han d'estar en la mateixa "
|
||||
"categoria."
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML no vàlid per a la definició de la vista!"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,life_date:0
|
||||
msgid "The date the lot may become dangerous and should not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,removal_date:0
|
||||
msgid "Removal Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,description:product_expiry.module_meta_information
|
||||
msgid ""
|
||||
"Track different dates on products and production lots:\n"
|
||||
" - end of life\n"
|
||||
" - best before date\n"
|
||||
" - removal date\n"
|
||||
" - alert date\n"
|
||||
"Used, for example, in food industries."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_pain_product_template
|
||||
msgid "Bread"
|
||||
msgstr "Pa"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.uom,name:product_expiry.product_uom_ltr
|
||||
#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
|
||||
msgid "LTR"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: view:product.product:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Dates"
|
||||
msgstr "Dates"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr "Error: La UdV ha d'estar en una categoria diferent que la UdM."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,life_date:0
|
||||
msgid "End of Life Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,use_date:0
|
||||
msgid "Best before Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,use_date:0
|
||||
msgid "The date the lot starts deteriorating without becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_jambon_product_template
|
||||
msgid "French cheese Camenbert"
|
||||
msgstr "Formatge Camembert francès"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,removal_time:0
|
||||
msgid "The number of days before a production lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,use_time:0
|
||||
msgid "Product usetime"
|
||||
msgstr "Temps d'ús producte"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,alert_date:0
|
||||
msgid "Alert Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,removal_time:0
|
||||
msgid "Product removal time"
|
||||
msgstr "Data eliminació producte"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,use_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot starts deteriorating without "
|
||||
"becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr "Error: Codi EAN erroni"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,life_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot may become dangerous and should "
|
||||
"not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,removal_date:0
|
||||
msgid "The date the lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,alert_time:0
|
||||
msgid "Product alert time"
|
||||
msgstr "Data alerta producte"
|
||||
|
||||
#~ msgid "Alert date"
|
||||
#~ msgstr "Data alarma"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Track different dates on products and lots. Used, for exampel, in food "
|
||||
#~ "industries: expiry date, alert date, date of removal, eso."
|
||||
#~ msgstr ""
|
||||
#~ "Gestiona diferents dates per a productes i lots. Utilitzat, per exemple, en "
|
||||
#~ "la indústria alimentària: Data de caducitat, data d'alarma, data "
|
||||
#~ "d'eliminació, ..."
|
||||
|
||||
#~ msgid "DLUO"
|
||||
#~ msgstr "Data caducitat"
|
||||
|
||||
#~ msgid "Removal date"
|
||||
#~ msgstr "Data eliminació"
|
|
@ -0,0 +1,180 @@
|
|||
# Spanish translation for openobject-addons
|
||||
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
|
||||
# This file is distributed under the same license as the openobject-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-06-30 15:09+0000\n"
|
||||
"PO-Revision-Date: 2010-04-29 04:43+0000\n"
|
||||
"Last-Translator: Rhubeni Lopes de Andrade <rhube.itsasecret@gmail.com>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-05-21 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,life_time:0
|
||||
msgid "Product lifetime"
|
||||
msgstr "Ciclo de vida producto"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_from_product_template
|
||||
msgid "Ham"
|
||||
msgstr "Jamón"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_lait_product_template
|
||||
msgid "Cow milk"
|
||||
msgstr "Leche de vaca"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
|
||||
msgid "Products date of expiry"
|
||||
msgstr "Fecha de caducidad de productos"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
"Error: La UdM por defecto y la UdM de compra deben estar en la misma "
|
||||
"categoría."
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "¡XML no válido para la definición de la vista!"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,life_date:0
|
||||
msgid "The date the lot may become dangerous and should not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,removal_date:0
|
||||
msgid "Removal Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,description:product_expiry.module_meta_information
|
||||
msgid ""
|
||||
"Track different dates on products and production lots:\n"
|
||||
" - end of life\n"
|
||||
" - best before date\n"
|
||||
" - removal date\n"
|
||||
" - alert date\n"
|
||||
"Used, for example, in food industries."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_pain_product_template
|
||||
msgid "Bread"
|
||||
msgstr "Pan"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.uom,name:product_expiry.product_uom_ltr
|
||||
#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
|
||||
msgid "LTR"
|
||||
msgstr "LTR"
|
||||
|
||||
#. module: product_expiry
|
||||
#: view:product.product:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Dates"
|
||||
msgstr "Fechas"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr "Error: La UdV debe estar en una categoría diferente que la UdM."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,life_date:0
|
||||
msgid "End of Life Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,use_date:0
|
||||
msgid "Best before Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,use_date:0
|
||||
msgid "The date the lot starts deteriorating without becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_jambon_product_template
|
||||
msgid "French cheese Camenbert"
|
||||
msgstr "Queso Camembert francés"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,removal_time:0
|
||||
msgid "The number of days before a production lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,use_time:0
|
||||
msgid "Product usetime"
|
||||
msgstr "Tiempo de uso producto"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,alert_date:0
|
||||
msgid "Alert Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,removal_time:0
|
||||
msgid "Product removal time"
|
||||
msgstr "Fecha eliminación producto"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,use_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot starts deteriorating without "
|
||||
"becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr "Error: Código EAN erróneo"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,life_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot may become dangerous and should "
|
||||
"not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,removal_date:0
|
||||
msgid "The date the lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,alert_time:0
|
||||
msgid "Product alert time"
|
||||
msgstr "Fecha alerta producto"
|
||||
|
||||
#~ msgid "Alert date"
|
||||
#~ msgstr "Fecha alarma"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Track different dates on products and lots. Used, for exampel, in food "
|
||||
#~ "industries: expiry date, alert date, date of removal, eso."
|
||||
#~ msgstr ""
|
||||
#~ "Gestiona distintas fechas para productos y lotes. Utilizado, por ejemplo, en "
|
||||
#~ "industria alimentaria: Fecha de caducidad, fecha de alarma, fecha de "
|
||||
#~ "eliminación, ..."
|
||||
|
||||
#~ msgid "DLUO"
|
||||
#~ msgstr "Fecha caducidad"
|
||||
|
||||
#~ msgid "Removal date"
|
||||
#~ msgstr "Fecha eliminación"
|
|
@ -0,0 +1,178 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * product_expiry
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-06-30 15:09+0000\n"
|
||||
"PO-Revision-Date: 2010-01-04 18:19+0000\n"
|
||||
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-05-21 03:45+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,life_time:0
|
||||
msgid "Product lifetime"
|
||||
msgstr "Durée limite de consommation"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_from_product_template
|
||||
msgid "Ham"
|
||||
msgstr "Jambon"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_lait_product_template
|
||||
msgid "Cow milk"
|
||||
msgstr "Lait de vache"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
|
||||
msgid "Products date of expiry"
|
||||
msgstr "Dates de péremption des produits"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid ""
|
||||
"Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
"Erreur: l'unité de mesure par défaut et l'unité de mesure d'achat doivent "
|
||||
"faire partie de la même catégorie"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valide pour l'architecture de la vue"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,life_date:0
|
||||
msgid "The date the lot may become dangerous and should not be consumed."
|
||||
msgstr ""
|
||||
"La date à laquelle le lot peut devenir dangereux et ne doit plus être "
|
||||
"consommé."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,removal_date:0
|
||||
msgid "Removal Date"
|
||||
msgstr "Date de retrait"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,description:product_expiry.module_meta_information
|
||||
msgid ""
|
||||
"Track different dates on products and production lots:\n"
|
||||
" - end of life\n"
|
||||
" - best before date\n"
|
||||
" - removal date\n"
|
||||
" - alert date\n"
|
||||
"Used, for example, in food industries."
|
||||
msgstr ""
|
||||
"Suit les différentes dates des produits et des lots de production\n"
|
||||
" - Date limite de consommation\n"
|
||||
" - DLUO\n"
|
||||
" - Date de retrait\n"
|
||||
" - Date d'alerte\n"
|
||||
"Utilisé par exemple dans les industries alimentaires"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_pain_product_template
|
||||
msgid "Bread"
|
||||
msgstr "Pain"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.uom,name:product_expiry.product_uom_ltr
|
||||
#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
|
||||
msgid "LTR"
|
||||
msgstr "LTR"
|
||||
|
||||
#. module: product_expiry
|
||||
#: view:product.product:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Dates"
|
||||
msgstr "Dates"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr ""
|
||||
"Erreur: l'unité de vente doit appartenir à une catégorie différente que "
|
||||
"l'unité de mesure"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,life_date:0
|
||||
msgid "End of Life Date"
|
||||
msgstr "Date limite de consommation"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,use_date:0
|
||||
msgid "Best before Date"
|
||||
msgstr "Date limite d'utilisation optimale"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,use_date:0
|
||||
msgid "The date the lot starts deteriorating without becoming dangerous."
|
||||
msgstr ""
|
||||
"La date à laquelle le lot commencera à se déteriorer sans devenir dangereux."
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_jambon_product_template
|
||||
msgid "French cheese Camenbert"
|
||||
msgstr "Fromage Camembert Français"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,removal_time:0
|
||||
msgid "The number of days before a production lot should be removed."
|
||||
msgstr ""
|
||||
"Le nombre de jours après lesquels un lot de production doit être retiré."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,use_time:0
|
||||
msgid "Product usetime"
|
||||
msgstr "Durée limite d'utilisation optimale"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,alert_date:0
|
||||
msgid "Alert Date"
|
||||
msgstr "Date d'alerte"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,removal_time:0
|
||||
msgid "Product removal time"
|
||||
msgstr "Durée avant retrait"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,use_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot starts deteriorating without "
|
||||
"becoming dangerous."
|
||||
msgstr ""
|
||||
"Le nombre de jours après lesquels un lot de production commencera à se "
|
||||
"déteriorer sans devenir dangereux"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr "Erreur: code EAN invalide"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,life_time:0
|
||||
msgid ""
|
||||
"The number of days before a production lot may become dangerous and should "
|
||||
"not be consumed."
|
||||
msgstr ""
|
||||
"Nombre de jours après lesquels un lot de production peut devenir dangereux "
|
||||
"et ne doit plus être consommé."
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,removal_date:0
|
||||
msgid "The date the lot should be removed."
|
||||
msgstr "La date à laquelle le lot doit être retiré."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,alert_time:0
|
||||
msgid "Product alert time"
|
||||
msgstr "Durée avant alerte"
|
|
@ -0,0 +1,159 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * product_expiry
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-06-30 15:09:36+0000\n"
|
||||
"PO-Revision-Date: 2009-06-30 15:09:36+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,life_time:0
|
||||
msgid "Product lifetime"
|
||||
msgstr "Durée limite de consommation"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_from_product_template
|
||||
msgid "Ham"
|
||||
msgstr "Jambon"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_lait_product_template
|
||||
msgid "Cow milk"
|
||||
msgstr "Lait de vache"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
|
||||
msgid "Products date of expiry"
|
||||
msgstr "Dates de péremption des produits"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr "Erreur: l'unité de mesure par défaut et l'unité de mesure d'achat doivent faire partie de la même catégorie"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr "XML non valide pour l'architecture de la vue"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,life_date:0
|
||||
msgid "The date the lot may become dangerous and should not be consumed."
|
||||
msgstr "La date à laquelle le lot peut devenir dangereux et ne doit plus être consommé."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,removal_date:0
|
||||
msgid "Removal Date"
|
||||
msgstr "Date de retrait"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,description:product_expiry.module_meta_information
|
||||
msgid "Track different dates on products and production lots:\n"
|
||||
" - end of life\n"
|
||||
" - best before date\n"
|
||||
" - removal date\n"
|
||||
" - alert date\n"
|
||||
"Used, for example, in food industries."
|
||||
msgstr "Suit les différentes dates des produits et des lots de production\n"
|
||||
" - Date limite de consommation\n"
|
||||
" - DLUO\n"
|
||||
" - Date de retrait\n"
|
||||
" - Date d'alerte\n"
|
||||
"Utilisé par exemple dans les industries alimentaires"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_pain_product_template
|
||||
msgid "Bread"
|
||||
msgstr "Pain"
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.uom,name:product_expiry.product_uom_ltr
|
||||
#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
|
||||
msgid "LTR"
|
||||
msgstr "LTR"
|
||||
|
||||
#. module: product_expiry
|
||||
#: view:product.product:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Dates"
|
||||
msgstr "Dates"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr "Erreur: l'unité de vente doit appartenir à une catégorie différente que l'unité de mesure"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,life_date:0
|
||||
msgid "End of Life Date"
|
||||
msgstr "Date limite de consommation"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,use_date:0
|
||||
msgid "Best before Date"
|
||||
msgstr "Date limite d'utilisation optimale"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,use_date:0
|
||||
msgid "The date the lot starts deteriorating without becoming dangerous."
|
||||
msgstr "La date à laquelle le lot commencera à se déteriorer sans devenir dangereux."
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_jambon_product_template
|
||||
msgid "French cheese Camenbert"
|
||||
msgstr "Fromage Camembert Français"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,removal_time:0
|
||||
msgid "The number of days before a production lot should be removed."
|
||||
msgstr "Le nombre de jours après lesquels un lot de production doit être retiré."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,use_time:0
|
||||
msgid "Product usetime"
|
||||
msgstr "Durée limite d'utilisation optimale"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,alert_date:0
|
||||
msgid "Alert Date"
|
||||
msgstr "Date d'alerte"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,removal_time:0
|
||||
msgid "Product removal time"
|
||||
msgstr "Durée avant retrait"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,use_time:0
|
||||
msgid "The number of days before a production lot starts deteriorating without becoming dangerous."
|
||||
msgstr "Le nombre de jours après lesquels un lot de production commencera à se déteriorer sans devenir dangereux"
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr "Erreur: code EAN invalide"
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,life_time:0
|
||||
msgid "The number of days before a production lot may become dangerous and should not be consumed."
|
||||
msgstr "Nombre de jours après lesquels un lot de production peut devenir dangereux et ne doit plus être consommé."
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,removal_date:0
|
||||
msgid "The date the lot should be removed."
|
||||
msgstr "La date à laquelle le lot doit être retiré."
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,alert_time:0
|
||||
msgid "Product alert time"
|
||||
msgstr "Durée avant alerte"
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * product_expiry
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.1\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-06-30 15:09:08+0000\n"
|
||||
"PO-Revision-Date: 2009-06-30 15:09:08+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,life_time:0
|
||||
msgid "Product lifetime"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_from_product_template
|
||||
msgid "Ham"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_lait_product_template
|
||||
msgid "Cow milk"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
|
||||
msgid "Products date of expiry"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: The default UOM and the purchase UOM must be in the same category."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,life_date:0
|
||||
msgid "The date the lot may become dangerous and should not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,removal_date:0
|
||||
msgid "Removal Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:ir.module.module,description:product_expiry.module_meta_information
|
||||
msgid "Track different dates on products and production lots:\n"
|
||||
" - end of life\n"
|
||||
" - best before date\n"
|
||||
" - removal date\n"
|
||||
" - alert date\n"
|
||||
"Used, for example, in food industries."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_pain_product_template
|
||||
msgid "Bread"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.uom,name:product_expiry.product_uom_ltr
|
||||
#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
|
||||
msgid "LTR"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: view:product.product:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Dates"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.template:0
|
||||
msgid "Error: UOS must be in a different category than the UOM"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,life_date:0
|
||||
msgid "End of Life Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,use_date:0
|
||||
msgid "Best before Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,use_date:0
|
||||
msgid "The date the lot starts deteriorating without becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: model:product.template,name:product_expiry.product_product_jambon_product_template
|
||||
msgid "French cheese Camenbert"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,removal_time:0
|
||||
msgid "The number of days before a production lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,use_time:0
|
||||
msgid "Product usetime"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:stock.production.lot,alert_date:0
|
||||
msgid "Alert Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,removal_time:0
|
||||
msgid "Product removal time"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,use_time:0
|
||||
msgid "The number of days before a production lot starts deteriorating without becoming dangerous."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: constraint:product.product:0
|
||||
msgid "Error: Invalid ean code"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:product.product,life_time:0
|
||||
msgid "The number of days before a production lot may become dangerous and should not be consumed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: help:stock.production.lot,removal_date:0
|
||||
msgid "The date the lot should be removed."
|
||||
msgstr ""
|
||||
|
||||
#. module: product_expiry
|
||||
#: field:product.product,alert_time:0
|
||||
msgid "Product alert time"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import datetime
|
||||
from osv import fields, osv
|
||||
import pooler
|
||||
import time
|
||||
|
||||
class stock_production_lot(osv.osv):
|
||||
_name = 'stock.production.lot'
|
||||
_inherit = 'stock.production.lot'
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if not len(ids):
|
||||
return []
|
||||
result = []
|
||||
for line in self.browse(cr, uid, ids, context):
|
||||
if line.life_date:
|
||||
result.append((line.id, (line.name or '')+' ('+line.life_date+')'))
|
||||
else:
|
||||
result.append((line.id, line.name))
|
||||
return result
|
||||
|
||||
|
||||
def _get_date(dtype):
|
||||
"""Return a function to compute the limit date for this type"""
|
||||
def calc_date(self, cr, uid, context=None):
|
||||
"""Compute the limit date for a given date"""
|
||||
if context is None:
|
||||
context = {}
|
||||
if not context.get('product_id', False):
|
||||
date = False
|
||||
else:
|
||||
product = pooler.get_pool(cr.dbname).get('product.product').browse(
|
||||
cr, uid, context['product_id'])
|
||||
duration = getattr(product, dtype)
|
||||
# set date to False when no expiry time specified on the product
|
||||
date = duration and (datetime.datetime.today()
|
||||
+ datetime.timedelta(days=duration))
|
||||
return date and date.strftime('%Y-%m-%d')
|
||||
return calc_date
|
||||
|
||||
_columns = {
|
||||
'life_date': fields.date('End of Life Date',
|
||||
help='The date the lot may become dangerous and should not be consumed.'),
|
||||
'use_date': fields.date('Best before Date',
|
||||
help='The date the lot starts deteriorating without becoming dangerous.'),
|
||||
'removal_date': fields.date('Removal Date',
|
||||
help='The date the lot should be removed.'),
|
||||
'alert_date': fields.date('Alert Date'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
# 'life_date': _get_date('life_time'),
|
||||
# 'use_date': _get_date('use_time'),
|
||||
# 'removal_date': _get_date('removal_time'),
|
||||
# 'alert_date': _get_date('alert_time'),
|
||||
}
|
||||
stock_production_lot()
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = 'product.product'
|
||||
_name = 'product.product'
|
||||
_columns = {
|
||||
'life_time': fields.integer('Product lifetime',
|
||||
help='The number of days before a production lot may become dangerous and should not be consumed.'),
|
||||
'use_time': fields.integer('Product usetime',
|
||||
help='The number of days before a production lot starts deteriorating without becoming dangerous.'),
|
||||
'removal_time': fields.integer('Product removal time',
|
||||
help='The number of days before a production lot should be removed.'),
|
||||
'alert_time': fields.integer('Product alert time'),
|
||||
}
|
||||
product_product()
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,128 @@
|
|||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="product_uom_categ_vol" model="product.uom.categ">
|
||||
<field name="name">LTR</field>
|
||||
</record>
|
||||
<record id="product_uom_ltr" model="product.uom">
|
||||
<field name="category_id" ref="product_uom_categ_vol"/>
|
||||
<field name="name">LTR</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_jambon" model="product.product">
|
||||
<field name="supply_method">buy</field>
|
||||
<field name="list_price">7.0</field>
|
||||
<field name="standard_price">5.0</field>
|
||||
<field name="uom_id" ref="product.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product.product_uom_unit"/>
|
||||
<field name="uos_id" ref="product.product_uom_kgm" />
|
||||
<field name="uos_coeff">3</field>
|
||||
<field name="name">French cheese Camenbert</field>
|
||||
<field name="life_time">15</field>
|
||||
<field name="use_time">10</field>
|
||||
<field name="removal_time">6</field>
|
||||
<field name="alert_time">5</field>
|
||||
<field name="default_code">JKB</field>
|
||||
<field name="ean13">3307630302014</field>
|
||||
<field name="categ_id" search="[]" model="product.category"/>
|
||||
</record>
|
||||
<record model="product.packaging">
|
||||
<field name="name">box of 10</field>
|
||||
<field name="qty">12</field>
|
||||
<field name="ul" ref="product.product_ul_box" />
|
||||
<field name="ul_qty">6</field>
|
||||
<field name="rows">4</field>
|
||||
<field name="product_id" ref="product_product_jambon" />
|
||||
<field name="ean">12345678901234</field>
|
||||
<field name="weight">10</field>
|
||||
<field name="weight_ul">240</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_from" model="product.product">
|
||||
<field name="supply_method">buy</field>
|
||||
<field name="list_price">8.0</field>
|
||||
<field name="standard_price">6.0</field>
|
||||
<field name="uom_id" ref="product.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product.product_uom_unit"/>
|
||||
<field name="uos_id" ref="product.product_uom_kgm" />
|
||||
<field name="uos_coeff">0.5</field>
|
||||
<field name="name">Ham</field>
|
||||
<field name="life_time">30</field>
|
||||
<field name="use_time">25</field>
|
||||
<field name="removal_time">20</field>
|
||||
<field name="alert_time">19</field>
|
||||
<field name="default_code">FKS</field>
|
||||
<field name="ean13">3307631101876</field>
|
||||
<field name="categ_id" search="[]" model="product.category"/>
|
||||
</record>
|
||||
<record model="product.packaging">
|
||||
<field name="name">Box of 5</field>
|
||||
<field name="qty">12</field>
|
||||
<field name="ul" ref="product.product_ul_box" />
|
||||
<field name="ul_qty">6</field>
|
||||
<field name="rows">4</field>
|
||||
<field name="product_id" ref="product_product_from" />
|
||||
<field name="ean">12345678901234</field>
|
||||
<field name="weight">10</field>
|
||||
<field name="weight_ul">240</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_pain" model="product.product">
|
||||
<field name="supply_method">buy</field>
|
||||
<field name="list_price">8.0</field>
|
||||
<field name="standard_price">6.0</field>
|
||||
<field name="uom_id" ref="product.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product.product_uom_unit"/>
|
||||
<field name="uos_id" ref="product.product_uom_kgm" />
|
||||
<field name="uos_coeff">0.5</field>
|
||||
<field name="name">Bread</field>
|
||||
<field name="life_time">30</field>
|
||||
<field name="use_time">25</field>
|
||||
<field name="removal_time">20</field>
|
||||
<field name="alert_time">19</field>
|
||||
<field name="default_code">PKB</field>
|
||||
<field name="ean13">3307631102323</field>
|
||||
<field name="categ_id" search="[]" model="product.category"/>
|
||||
</record>
|
||||
<record model="product.packaging">
|
||||
<field name="name">Bag of 2</field>
|
||||
<field name="qty">6</field>
|
||||
<field name="ul" ref="product.product_ul_box" />
|
||||
<field name="ul_qty">6</field>
|
||||
<field name="rows">4</field>
|
||||
<field name="product_id" ref="product_product_pain" />
|
||||
<field name="ean">12345678901234</field>
|
||||
<field name="weight">10</field>
|
||||
<field name="weight_ul">240</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_lait" model="product.product">
|
||||
<field name="supply_method">buy</field>
|
||||
<field name="list_price">8.0</field>
|
||||
<field name="standard_price">6.0</field>
|
||||
<field name="uom_id" ref="product.product_uom_unit"/>
|
||||
<field name="uom_po_id" ref="product.product_uom_unit"/>
|
||||
<field name="uos_id" ref="product_uom_ltr" />
|
||||
<field name="uos_coeff">0.5</field>
|
||||
<field name="name">Cow milk</field>
|
||||
<field name="life_time">30</field>
|
||||
<field name="use_time">25</field>
|
||||
<field name="removal_time">20</field>
|
||||
<field name="alert_time">19</field>
|
||||
<field name="default_code">LEX</field>
|
||||
<field name="ean13">3307630302045</field>
|
||||
<field name="categ_id" search="[]" model="product.category"/>
|
||||
</record>
|
||||
<record model="product.packaging">
|
||||
<field name="name">Boxes of 1 liter</field>
|
||||
<field name="qty">4</field>
|
||||
<field name="ul" ref="product.product_ul_box" />
|
||||
<field name="ul_qty">6</field>
|
||||
<field name="rows">4</field>
|
||||
<field name="product_id" ref="product_product_lait" />
|
||||
<field name="ean">12345678901234</field>
|
||||
<field name="weight">10</field>
|
||||
<field name="weight_ul">240</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="view_move_form_expiry">
|
||||
<field name="name">stock.production.lot.form</field>
|
||||
<field name="model">stock.production.lot</field>
|
||||
<field name="inherit_id" ref="stock.view_production_lot_form" />
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="date" position="after">
|
||||
<separator string="Dates" colspan="4" />
|
||||
<field name="life_date" />
|
||||
<field name="use_date" />
|
||||
<field name="removal_date" />
|
||||
<field name="alert_date" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_product_form_expiry">
|
||||
<field name="name">product.normal.form</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view" />
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<notebook position="inside">
|
||||
<page string="Dates">
|
||||
<separator string="Dates" colspan="4" />
|
||||
<field name="life_time" />
|
||||
<field name="use_time" />
|
||||
<field name="removal_time" />
|
||||
<field name="alert_time" />
|
||||
</page>
|
||||
</notebook>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import report_stock
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
import tools
|
||||
from tools.sql import drop_view_if_exists
|
||||
|
||||
class stock_report_prodlots(osv.osv):
|
||||
_name = "stock.report.prodlots1"
|
||||
_description = "Stock report by production lots"
|
||||
_auto = False
|
||||
_columns = {
|
||||
'name': fields.float('Quantity', readonly=True),
|
||||
'location_id': fields.many2one('stock.location', 'Location', readonly=True, select=True),
|
||||
'product_id': fields.many2one('product.product', 'Product', readonly=True, select=True),
|
||||
'prodlot_id': fields.many2one('stock.production.lot', 'Production lot', readonly=True, select=True),
|
||||
'life_date': fields.date('End of Life Date',
|
||||
help='The date the lot may become dangerous and should not be consumed.'),
|
||||
'use_date': fields.date('Best before Date',
|
||||
help='The date the lot starts deteriorating without becoming dangerous.'),
|
||||
'removal_date': fields.date('Removal Date',
|
||||
help='The date the lot should be removed.'),
|
||||
'alert_date': fields.date('Alert Date'),
|
||||
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
drop_view_if_exists(cr, 'stock_report_prodlots1')
|
||||
cr.execute("""
|
||||
create or replace view stock_report_prodlots1 as (
|
||||
select max(id) as id,
|
||||
location_id,
|
||||
product_id,
|
||||
prodlot_id,
|
||||
life_date,
|
||||
use_date,
|
||||
removal_date,
|
||||
alert_date,
|
||||
sum(qty) as name
|
||||
from (
|
||||
select -max(sm.id) as id,
|
||||
sm.location_id,
|
||||
sm.product_id,
|
||||
sm.prodlot_id,
|
||||
spl.life_date,
|
||||
spl.use_date,
|
||||
spl.removal_date,
|
||||
spl.alert_date,
|
||||
-sum(sm.product_qty /uo.factor) as qty
|
||||
from stock_move as sm
|
||||
left join stock_location sl
|
||||
on (sl.id = sm.location_id)
|
||||
left join stock_production_lot spl
|
||||
on (sm.prodlot_id=spl.id)
|
||||
left join product_uom uo
|
||||
on (uo.id=sm.product_uom)
|
||||
where state = 'done'
|
||||
group by sm.location_id, sm.product_id, sm.product_uom, sm.prodlot_id,
|
||||
spl.life_date,
|
||||
spl.use_date,
|
||||
spl.removal_date,
|
||||
spl.alert_date
|
||||
|
||||
union all
|
||||
select max(sm.id) as id,
|
||||
sm.location_dest_id as location_id,
|
||||
sm.product_id,
|
||||
sm.prodlot_id,
|
||||
spl.life_date,
|
||||
spl.use_date,
|
||||
spl.removal_date,
|
||||
spl.alert_date,
|
||||
sum(sm.product_qty /uo.factor) as qty
|
||||
from stock_move as sm
|
||||
left join stock_location sl
|
||||
on (sl.id = sm.location_dest_id)
|
||||
left join stock_production_lot spl
|
||||
on (sm.prodlot_id=spl.id)
|
||||
left join product_uom uo
|
||||
on (uo.id=sm.product_uom)
|
||||
where sm.state = 'done'
|
||||
group by sm.location_dest_id, sm.product_id, sm.product_uom, sm.prodlot_id,
|
||||
spl.life_date,
|
||||
spl.use_date,
|
||||
spl.removal_date,
|
||||
spl.alert_date
|
||||
|
||||
) as report
|
||||
group by location_id, product_id, prodlot_id,
|
||||
life_date,
|
||||
use_date,
|
||||
removal_date,
|
||||
alert_date
|
||||
)""")
|
||||
|
||||
def unlink(self, cr, uid, ids, context={}):
|
||||
raise osv.except_osv(_('Error !'), _('You cannot delete any record!'))
|
||||
|
||||
|
||||
stock_report_prodlots()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,103 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_stock_report_prodlots_filter" model="ir.ui.view">
|
||||
<field name="name">stock.report.prodlots.filter</field>
|
||||
<field name="model">stock.report.prodlots1</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Location">
|
||||
<group col="10" colspan="4">
|
||||
<filter icon="terp-go-home" name="internal_locations" string="Internal Locations" domain="[('location_id.usage', '=', 'internal')]" help="Internal Locations"/>
|
||||
<filter icon="terp-go-home" string="Customer Locations" domain="[('location_id.usage', '=', 'customer')]" help="Customer Locations" />
|
||||
<filter icon="terp-go-home" string="Supplier Locations" domain="[('location_id.usage', '=', 'supplier')]" help="Supplier Locations" />
|
||||
<separator orientation="vertical"/>
|
||||
<field name="location_id"/>
|
||||
<field name="product_id"/>
|
||||
<newline/>
|
||||
<field name="use_date" />
|
||||
<field name="life_date" string="End of Life" />
|
||||
<field name="alert_date" />
|
||||
<field name="removal_date" string="Removal D." />
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="1" string="Group By..." colspan="4" col="10">
|
||||
<filter string="Location" icon="terp-go-home" domain="[]" context="{'group_by':'location_id'}"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="stock_report_prodlots_form" model="ir.ui.view">
|
||||
<field name="name">stock.report.prodlots.view</field>
|
||||
<field name="model">stock.report.prodlots1</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Stock by Lots">
|
||||
<field name="location_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field name="name"/>
|
||||
<field name="use_date" />
|
||||
<field name="life_date" string="End of Life" />
|
||||
<field name="alert_date" />
|
||||
<field name="removal_date" string="Removal D." />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_report_prodlots_tree" model="ir.ui.view">
|
||||
<field name="name">stock.report.prodlots.view</field>
|
||||
<field name="model">stock.report.prodlots1</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Stock by Lots">
|
||||
<field name="location_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field name="name"/>
|
||||
<field name="use_date" />
|
||||
<field name="life_date" string="End of Life" />
|
||||
<field name="alert_date" />
|
||||
<field name="removal_date" string="Removal D." />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="stock_report_prodlots_graph" model="ir.ui.view">
|
||||
<field name="name">stock.report.prodlots.view</field>
|
||||
<field name="model">stock.report.prodlots1</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Stock by Lots" type="bar">
|
||||
<field name="product_id"/>
|
||||
<field name="name"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="stock.action_stock_report_prodlots_form" model="ir.actions.act_window">
|
||||
<field name="name">Inventory by Location</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">stock.report.prodlots1</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'full':'1','search_default_internal_locations':1}</field>
|
||||
<field name="search_view_id" ref="view_stock_report_prodlots_filter" />
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
domain="[('product_id','=',active_id)]"
|
||||
id="stock.act_product_product_2_stock_report_prodlots"
|
||||
name="Stock by Lots"
|
||||
res_model="stock.report.prodlots1"
|
||||
src_model="product.product"
|
||||
groups="base.group_extended"/>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1 @@
|
|||
import stock_partial
|
|
@ -0,0 +1,80 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from service import web_services
|
||||
from tools.misc import UpdateableStr, UpdateableDict
|
||||
from tools.translate import _
|
||||
import netsvc
|
||||
import pooler
|
||||
import time
|
||||
import datetime
|
||||
import wizard
|
||||
|
||||
class stock_partial_lot_picking(osv.osv_memory):
|
||||
_inherit = "stock.partial.picking"
|
||||
_name = "stock.partial.picking"
|
||||
_description = "Partial Picking"
|
||||
|
||||
def do_partial(self, cr, uid, ids, context):
|
||||
res = super(stock_partial_lot_picking, self).do_partial(cr, uid, ids, context=context)
|
||||
prodlot_obj = self.pool.get('stock.production.lot')
|
||||
pick_obj = self.pool.get('stock.picking')
|
||||
picking_ids = context.get('active_ids', False)
|
||||
partial = self.browse(cr, uid, ids[0], context)
|
||||
for pick in pick_obj.browse(cr, uid, picking_ids):
|
||||
for m in pick.move_lines:
|
||||
for pick in pick_obj.browse(cr, uid, picking_ids):
|
||||
for m in pick.move_lines:
|
||||
res = {}
|
||||
if (pick.type == 'in') and m.prodlot_id:
|
||||
if not m.prodlot_id.life_date:
|
||||
date_life = (datetime.datetime.strptime(partial.date, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(days=m.product_id.life_time))
|
||||
res['life_date'] = date_life.strftime('%Y-%m-%d')
|
||||
if not m.prodlot_id.use_date:
|
||||
date_use = (datetime.datetime.strptime(partial.date, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(days=m.product_id.use_time))
|
||||
res['use_date'] = date_use.strftime('%Y-%m-%d')
|
||||
if not m.prodlot_id.removal_date:
|
||||
date_removal = (datetime.datetime.strptime(partial.date, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(days=m.product_id.removal_time))
|
||||
res['removal_date'] = date_removal.strftime('%Y-%m-%d')
|
||||
if not m.prodlot_id.alert_date:
|
||||
date_alert = (datetime.datetime.strptime(partial.date, '%Y-%m-%d %H:%M:%S') + datetime.timedelta(days=m.product_id.alert_time))
|
||||
res['alert_date'] = date_alert.strftime('%Y-%m-%d')
|
||||
prodlot_obj.write(cr, uid, [m.prodlot_id.id], res)
|
||||
return res
|
||||
stock_partial_lot_picking()
|
||||
|
||||
class stock_move_split_lines_exist(osv.osv_memory):
|
||||
_name = "stock.move.split.lines.exist"
|
||||
_inherit = "stock.move.split.lines.exist"
|
||||
_columns = {
|
||||
'date': fields.date('Expiry Date'),
|
||||
}
|
||||
def on_change_product(self, cr, uid, ids, product_id):
|
||||
if not product_id:
|
||||
return {'value':{'date': False}}
|
||||
day_life = self.pool.get('product.product').browse(cr, uid, product_id).life_time
|
||||
date_life = (datetime.datetime.now() + datetime.timedelta(days=day_life))
|
||||
return {'value':{'date': date_life.strftime('%Y-%m-%d')
|
||||
}}
|
||||
|
||||
|
||||
stock_move_split_lines_exist()
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_split_in_lots" model="ir.ui.view">
|
||||
<field name="name">Split in lots</field>
|
||||
<field name="model">stock.move.split</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="stock.view_split_in_lots"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//form/group/field[@name='line_exist_ids']/tree/field[@name='prodlot_id']" position="replace">
|
||||
<field name="prodlot_id" on_change="on_change_product(parent.product_id)"/>
|
||||
</xpath>
|
||||
<xpath expr="//form/group/field[@name='line_exist_ids']/tree/field[@name='quantity']" position="after">
|
||||
<field name="date"/>
|
||||
</xpath>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
|
@ -0,0 +1,23 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import product_manufacturer
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
{
|
||||
"name" : "Products Attributes & Manufacturers",
|
||||
"version" : "1.0",
|
||||
"author" : "Tiny",
|
||||
"category" : "Enterprise Specific Modules/Industries",
|
||||
"depends" : ["base", "account", "product", "stock"],
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"description": "A module that add manufacturers and attributes on the product form",
|
||||
"update_xml" : ["security/ir.model.access.csv","product_manufacturer_view.xml"],
|
||||
"active": False,
|
||||
"installable": True
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * product_electronic
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.6\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-11-25 13:27:55+0000\n"
|
||||
"PO-Revision-Date: 2009-11-25 13:27:55+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.module.module,description:product_electronic.module_meta_information
|
||||
msgid "A module that add manufacturers and attributes on the product form"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer_pref:0
|
||||
msgid "Manufacturer product code"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.electronic.attribute:0
|
||||
msgid "Product Template Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.model,name:product_electronic.model_product_electronic_attribute
|
||||
msgid "Product attributes"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Manufacturing data"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Product reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,name:0
|
||||
msgid "Attribute"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,product_id:0
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,value:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Manufacturing Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Product name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
#: field:product.product,attribute_ids:0
|
||||
msgid "Attributes"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.module.module,shortdesc:product_electronic.module_meta_information
|
||||
msgid "Products Attributes & Manufacturers"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer_pname:0
|
||||
msgid "Manufacturer product name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer:0
|
||||
msgid "Manufacturer"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * product_electronic
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 5.0.6\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-11-25 13:27:55+0000\n"
|
||||
"PO-Revision-Date: 2009-11-25 13:27:55+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.module.module,description:product_electronic.module_meta_information
|
||||
msgid "A module that add manufacturers and attributes on the product form"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer_pref:0
|
||||
msgid "Manufacturer product code"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: constraint:ir.ui.view:0
|
||||
msgid "Invalid XML for View Architecture!"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.electronic.attribute:0
|
||||
msgid "Product Template Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: constraint:ir.model:0
|
||||
msgid "The Object name must start with x_ and not contain any special character !"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.model,name:product_electronic.model_product_electronic_attribute
|
||||
msgid "Product attributes"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Manufacturing data"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Product reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,name:0
|
||||
msgid "Attribute"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,product_id:0
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.electronic.attribute,value:0
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Manufacturing Data"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
msgid "Product name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: view:product.product:0
|
||||
#: field:product.product,attribute_ids:0
|
||||
msgid "Attributes"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: model:ir.module.module,shortdesc:product_electronic.module_meta_information
|
||||
msgid "Products Attributes & Manufacturers"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer_pname:0
|
||||
msgid "Manufacturer product name"
|
||||
msgstr ""
|
||||
|
||||
#. module: product_electronic
|
||||
#: field:product.product,manufacturer:0
|
||||
msgid "Manufacturer"
|
||||
msgstr ""
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields,osv
|
||||
|
||||
class product_product(osv.osv):
|
||||
_inherit = 'product.product'
|
||||
_name = 'product.product'
|
||||
_columns = {
|
||||
'attribute_ids': fields.one2many('product.manufacturer.attribute', 'product_id', 'Attributes'),
|
||||
'manufacturer_ids': fields.one2many('res.partner.manufacturer', 'product_id', 'Manufacturers'),
|
||||
}
|
||||
product_product()
|
||||
|
||||
class res_partner_manufacturer(osv.osv):
|
||||
_name = 'res.partner.manufacturer'
|
||||
_rec_name = 'manufacturer_id'
|
||||
_columns = {
|
||||
'manufacturer_id' : fields.many2one('res.partner', 'Manufacturer'),
|
||||
'country_id' : fields.many2one('res.country', 'Country'),
|
||||
'authorized' : fields.boolean('Authorized'),
|
||||
'product_id': fields.many2one('product.product', 'Product', ondelete='cascade'),
|
||||
}
|
||||
_defaults = {
|
||||
'authorized': lambda *a: True,
|
||||
}
|
||||
|
||||
res_partner_manufacturer()
|
||||
|
||||
class product_attribute(osv.osv):
|
||||
_name = "product.manufacturer.attribute"
|
||||
_description = "Product attributes"
|
||||
_columns = {
|
||||
'name' : fields.char('Attribute', size=64, required=True),
|
||||
'value' : fields.char('Value', size=64),
|
||||
'product_id': fields.many2one('product.product', 'Product', ondelete='cascade'),
|
||||
}
|
||||
product_attribute()
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" ?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="view_product_form_expiry">
|
||||
<field name="name">product.normal.form</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view" />
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<notebook position="inside">
|
||||
<page string="Manufacturing Data">
|
||||
<separator string="Manufacturing data" colspan="4" />
|
||||
<field name="manufacturer_ids" colspan="4" nolabel="1" widget="one2many_list"/>
|
||||
|
||||
<separator string="Attributes" colspan="4"/>
|
||||
<field name="attribute_ids" colspan="4" nolabel="1" widget="one2many_list" />
|
||||
</page>
|
||||
</notebook>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="product_manufacturer_attribute_tree_view">
|
||||
<field name="name">product.manufacturer.attribute.tree</field>
|
||||
<field name="model">product.manufacturer.attribute</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Product Template Name">
|
||||
<field name="name"/>
|
||||
<field name="value"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="product_manufacturer_attribute_form_view">
|
||||
<field name="name">product.manufacturer.attribute.form</field>
|
||||
<field name="model">product.manufacturer.attribute</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Product Template Name">
|
||||
<field name="name" select="1"/>
|
||||
<field name="value" select="1"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="product_manufacturer_manufact_tree_view">
|
||||
<field name="name">res.partner.manufacturer.tree</field>
|
||||
<field name="model">res.partner.manufacturer</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Manufacturers" editable="top">
|
||||
<field name="manufacturer_id"/>
|
||||
<field name="country_id"/>
|
||||
<field name="authorized"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="product_manufacturer_manufa_form_view">
|
||||
<field name="name">res.partner.manufacturer.form</field>
|
||||
<field name="model">res.partner.manufacturer</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Manufacturers">
|
||||
<field name="manufacturer_id" colspan="4"/>
|
||||
<field name="country_id"/>
|
||||
<field name="authorized"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
|
||||
"access_product_manufacturer_attribute","product.manufacturer.attribute","model_product_manufacturer_attribute","product.group_uos",1,0,0,0
|
||||
"access_product_manufacturer_attribute_manager","product.manufacturer.attribute","model_product_manufacturer_attribute","product.group_product_manager",1,1,1,1
|
||||
"access_partner_manufacturer","res.partner.manufacturer","model_res_partner_manufacturer","product.group_uos",1,0,0,0
|
||||
"access_partner_manufacturer_manager","res.partner.manufacturer","model_res_partner_manufacturer","product.group_uos",1,1,1,1
|
|
|
@ -19,9 +19,6 @@
|
|||
"access_task_by_days","task.by.days","model_task_by_days","project.group_project_user",1,1,1,1
|
||||
"access_close_task","close.task","model_close_task","project.group_project_user",1,1,1,1
|
||||
"access_close_task_manager","close.task manager","model_close_task","project.group_project_manager",1,1,1,1
|
||||
"access_resource_calendar_project_user","resource.resource.calendar project user","resource.model_resource_calendar","project.group_project_user",1,0,0,0
|
||||
"access_resource_calendar_project_manager","resource.resource.calendar project manager","resource.model_resource_calendar","project.group_project_manager",1,1,1,1
|
||||
"access_fiscalyear_sequence_project_manager","account.sequence.fiscalyear project manager","account.model_account_sequence_fiscalyear","project.group_project_manager",1,1,0,0
|
||||
"access_partner_task user","base.res.partner user","base.model_res_partner","project.group_project_user",1,0,0,0
|
||||
"access_partner_task manager","base.res.partner manager","base.model_res_partner","project.group_project_manager",1,0,0,0
|
||||
"access_partner_address_task user","base.res.partner.address user","base.model_res_partner_address","project.group_project_user",1,0,0,0
|
||||
|
|
|
|
@ -164,10 +164,10 @@
|
|||
<group col="8" colspan="4">
|
||||
<filter icon="terp-check" string="Current Plannings" domain="[('date_from','<=',time.strftime('%%Y-%%m-%%d')),('date_to','>=',time.strftime('%%Y-%%m-%%d'))]" help="Current Plannings"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name">
|
||||
<field name="code">
|
||||
<field name="user_id">
|
||||
<field name="state">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="user_id"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
|
@ -93,7 +93,6 @@
|
|||
<field name="price_unit"/>
|
||||
<field name="price_subtotal" groups="base.group_extended"/>
|
||||
<field name="invoiced"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
<!-- default form view -->
|
||||
</field>
|
||||
|
|
|
@ -112,6 +112,33 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_purchase_order_qty_amount_graph">
|
||||
<field name="name">purchase.order.qty.amount.graph</field>
|
||||
<field name="model">purchase.report</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Total Qty and Amount by month" type="bar">
|
||||
<field name="month"/>
|
||||
<field name="quantity" operator="+"/>
|
||||
<field name="price_total" operator="+"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_purchase_order_by_user_graph">
|
||||
<field name="name">purchase.order.by.user.graph</field>
|
||||
<field name="model">purchase.report</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Total Orders Lines by User per month" orientation="vertical" type="bar">
|
||||
<field name="month" />
|
||||
<field name="nbr" operator="+"/>
|
||||
<field name="user_id" group="True" />
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="action_purchase_order_report_all" model="ir.actions.act_window">
|
||||
<field name="name">Purchase Orders</field>
|
||||
<field name="res_model">purchase.report</field>
|
||||
|
@ -120,6 +147,23 @@
|
|||
<field name="context">{'search_default_month':1,'search_default_group_partner_id':1,'search_default_group_product_id': 1, 'search_default_orders': 1, 'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_purchase_order_report_graph" model="ir.actions.act_window">
|
||||
<field name="name">Total Qty and Amount by month</field>
|
||||
<field name="res_model">purchase.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="view_id" ref="view_purchase_order_qty_amount_graph"></field>
|
||||
</record>
|
||||
|
||||
<record id="action_purchase_order_by_user_all" model="ir.actions.act_window">
|
||||
<field name="name">Total Orders by User per month</field>
|
||||
<field name="res_model">purchase.report</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="view_id" ref="view_purchase_order_by_user_graph"></field>
|
||||
</record>
|
||||
|
||||
|
||||
<menuitem id="base.next_id_73" name="Reporting" parent="base.menu_purchase_root" sequence="8"/>
|
||||
<menuitem action="action_purchase_order_report_all" id="menu_action_purchase_order_report_all" parent="base.next_id_73" sequence="3"/>
|
||||
|
||||
|
|
|
@ -2,4 +2,5 @@
|
|||
"access_resource_calendar","resource.calendar","model_resource_calendar","base.group_system",1,1,1,1
|
||||
"access_resource_calendar_week","resource.calendar.week","model_resource_calendar_week","base.group_system",1,1,1,1
|
||||
"access_resource_resource","resource.resource","model_resource_resource","base.group_system",1,1,1,1
|
||||
"access_resource_resource_all","resource.resource all","model_resource_resource",,1,0,0,0
|
||||
"access_resource_calendar_leaves","resource.calendar.leaves","model_resource_calendar_leaves","base.group_system",1,1,1,1
|
||||
|
|
|
|
@ -100,7 +100,7 @@ class sale_report(osv.osv):
|
|||
u.name 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,
|
||||
(sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty * u.factor))::decimal(16,2) as price_average,
|
||||
(sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty * u.factor)*count(l.product_id))::decimal(16,2) as price_average,
|
||||
pt.categ_id, l.order_id
|
||||
from
|
||||
sale_order_line l
|
||||
|
|
|
@ -200,7 +200,7 @@
|
|||
<field name="amount_untaxed" sum="Untaxed amount"/>
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total"/>
|
||||
<button name="button_dummy" states="draft" string="Compute" type="object" icon="gtk-execute"/>
|
||||
<button name="button_dummy" states="draft" string="" type="object" icon="gtk-execute"/>
|
||||
<button name="%(action_view_sale_advance_payment_inv)d" string="Deposit" type="action" icon="gtk-execute"/>
|
||||
</group>
|
||||
<group col="13" colspan="4">
|
||||
|
@ -287,7 +287,6 @@
|
|||
<field name="res_model">sale.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar,graph</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="search_view_id" ref="view_sales_order_filter"/>
|
||||
</record>
|
||||
<menuitem action="action_order_form" id="menu_sale_order" parent="base.menu_sales" sequence="3"/>
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
In order to test the sale order working with procurements I will create some
|
||||
products with different supply method and procurement method.
|
||||
-
|
||||
I create two products.
|
||||
-
|
||||
I create one product Table.
|
||||
I create one product Table as MTO.
|
||||
-
|
||||
!record {model: product.product, id: product_product_table0}:
|
||||
categ_id: product.cat1
|
||||
|
@ -15,7 +13,7 @@
|
|||
uom_id: product.product_uom_unit
|
||||
uom_po_id: product.product_uom_unit
|
||||
-
|
||||
I create another product Wood.
|
||||
I create another product Wood as MTS.
|
||||
-
|
||||
!record {model: product.product, id: product_product_wood0}:
|
||||
categ_id: product.cat1
|
||||
|
@ -26,7 +24,7 @@
|
|||
uom_id: product.product_uom_kgm
|
||||
uom_po_id: product.product_uom_kgm
|
||||
-
|
||||
I define Minimum stock rule for my stockable product wood
|
||||
I define Minimum stock rule for my stockable product Wood (qty between 10 and 15)
|
||||
-
|
||||
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
|
||||
company_id: base.main_company
|
||||
|
@ -77,19 +75,16 @@
|
|||
proc_ids = self.search(cr, uid, [('state','=','confirmed')])
|
||||
assert proc_ids, _('No Procurements!')
|
||||
-
|
||||
The scheduler runs.
|
||||
I run the scheduler.
|
||||
-
|
||||
!function {model: procurement.order, name: run_scheduler}:
|
||||
- model: procurement.order
|
||||
search: "[('state','=','confirmed')]"
|
||||
-
|
||||
I check that the procurement for the product table is in exception state.
|
||||
As my product's supply method is produce and mrp module is yet not installed.
|
||||
As my product's supply method is produce and the BoM is not defined.
|
||||
-
|
||||
!python {model: procurement.order}: |
|
||||
from tools.translate import _
|
||||
proc_ids = self.search(cr, uid, [('state','=','exception')])
|
||||
assert proc_ids, _('No Procurements are in exception state!')
|
||||
|
||||
|
||||
|
||||
proc_ids = self.search(cr, uid, [('state','=','exception'),('product_id','=',ref('sale.product_product_table0'))])
|
||||
assert proc_ids, _('No Procurements are in exception state for the table!')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-
|
||||
In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
|
||||
In order to test the sale module, I need to configure details regarding product & customer.
|
||||
-
|
||||
I am going to sell my Mobile products to the customer with name Cleartrail
|
||||
-
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import sale
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
'name': 'Customer & Sales',
|
||||
'version': '1.0',
|
||||
'category': 'Generic Modules/CRM & SRM',
|
||||
'description': """Sale Orders Dates""",
|
||||
'author': 'Tiny',
|
||||
'website': 'http://www.openerp.com',
|
||||
'depends': ["sale"],
|
||||
'init_xml': [
|
||||
],
|
||||
|
||||
'update_xml': [
|
||||
'sale_view.xml',
|
||||
],
|
||||
'demo_xml': [
|
||||
],
|
||||
'test': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
}
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,68 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
import time
|
||||
from mx import DateTime
|
||||
class sale_order_dates(osv.osv):
|
||||
_inherit = 'sale.order'
|
||||
_name = 'sale.order'
|
||||
|
||||
def _get_effective_date(self, cr, uid, ids, name, arg, context={}):
|
||||
res = {}
|
||||
dates_list = []
|
||||
for order in self.browse(cr, uid, ids):
|
||||
dates_list = []
|
||||
for pick in order.picking_ids:
|
||||
dates_list.append(pick.date)
|
||||
if dates_list:
|
||||
res[order.id] = min(dates_list)
|
||||
else:
|
||||
res[order.id] =False
|
||||
return res
|
||||
|
||||
def _get_commitment_date(self, cr, uid, ids, name, arg, context={}):
|
||||
res = {}
|
||||
dates_list = []
|
||||
for order in self.browse(cr, uid, ids):
|
||||
dates_list = []
|
||||
for line in order.order_line:
|
||||
dt=DateTime.strptime(order.date_order, '%Y-%m-%d') + DateTime.RelativeDateTime(days=line.delay or 0.0)
|
||||
dt_s = dt.strftime('%Y-%m-%d')
|
||||
dates_list.append(dt_s)
|
||||
res[order.id] = min(dates_list)
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'commitment_date': fields.function(_get_commitment_date, method=True,store=True, type='date', string='Commitment Date'),
|
||||
'requested_date': fields.date('Requested Date'),
|
||||
'effective_date': fields.function(_get_effective_date, method=True, type='date', store=True,string='Effective Date'),
|
||||
}
|
||||
sale_order_dates()
|
||||
"""
|
||||
- date_commitment: min(fields.function using delay on SO lines +
|
||||
date_order)
|
||||
- date_requested: fields.date
|
||||
- Effective date: fields.function the first picking done.
|
||||
"""
|
||||
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_sale_orderfor" model="ir.ui.view">
|
||||
<field name="name">sale.order.form.inherit5</field>
|
||||
<field name="model">sale.order</field>
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="sale.view_order_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="date_confirm" position="after">
|
||||
<separator string="Dates" colspan="4"/>
|
||||
<field name="commitment_date"/>
|
||||
<newline/>
|
||||
<field name="effective_date"/>
|
||||
<field name="requested_date"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -50,6 +50,7 @@ Thanks to the double entry management, the inventory controlling is powerful and
|
|||
"wizard/stock_invoice_onshipping_view.xml",
|
||||
"wizard/stock_inventory_merge_view.xml",
|
||||
"wizard/stock_location_product_view.xml",
|
||||
"wizard/stock_splitinto_view.xml",
|
||||
"wizard/stock_inventory_line_split_view.xml",
|
||||
"wizard/stock_change_standard_price_view.xml",
|
||||
"wizard/stock_traceability_view.xml",
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2009-11-17 10:48+0000\n"
|
||||
"Last-Translator: Marcel van der Boom (HS-Development BV) <mrb@hsdev.com>\n"
|
||||
"PO-Revision-Date: 2010-06-14 13:39+0000\n"
|
||||
"Last-Translator: Marcel van der Boom (HS-Development BV) <marcel@hsdev.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-04-17 03:55+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: stock
|
||||
|
@ -44,13 +44,13 @@ msgstr "terp-account"
|
|||
#. module: stock
|
||||
#: constraint:ir.actions.act_window:0
|
||||
msgid "Invalid model name in the action definition."
|
||||
msgstr ""
|
||||
msgstr "Ongeldige modelnaam in de definitie van de actie."
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.module.module,shortdesc:stock.module_meta_information
|
||||
#: model:ir.ui.menu,name:stock.menu_stock_root
|
||||
msgid "Inventory Management"
|
||||
msgstr ""
|
||||
msgstr "Voorraadbeheer"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -70,7 +70,7 @@ msgstr "STOCK_MEDIA_FORWARD"
|
|||
#. module: stock
|
||||
#: rml:lot.location:0
|
||||
msgid "Total :"
|
||||
msgstr ""
|
||||
msgstr "Totaal :"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -81,7 +81,7 @@ msgstr "STOCK_ZOOM_100"
|
|||
#: rml:lot.stock.overview:0
|
||||
#: rml:lot.stock.overview_all:0
|
||||
msgid "UoM"
|
||||
msgstr ""
|
||||
msgstr "Meeteenheid"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.wizard,name:stock.return_picking
|
||||
|
@ -109,7 +109,7 @@ msgstr "Paklijst"
|
|||
#: rml:lot.stock.overview:0
|
||||
#: rml:lot.stock.overview_all:0
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
msgstr "Hoeveelheid"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
|
@ -141,8 +141,7 @@ msgstr "Relatie"
|
|||
#. module: stock
|
||||
#: help:product.product,track_incoming:0
|
||||
msgid "Force to use a Production Lot during receptions"
|
||||
msgstr ""
|
||||
"Forceer om een productie-eenheid te gebruiken tijdens goederenontvangst."
|
||||
msgstr "Forceer het gebruik van een batchnummer bij goederenontvangst"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.move,move_history_ids:0
|
||||
|
@ -155,7 +154,7 @@ msgstr "Notatie"
|
|||
#: field:stock.production.lot.revision,lot_id:0
|
||||
#: field:stock.report.prodlots,prodlot_id:0
|
||||
msgid "Production lot"
|
||||
msgstr "Seriegrootte"
|
||||
msgstr "Batchnummer"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -306,7 +305,7 @@ msgstr "STOCK_FLOPPY"
|
|||
#. module: stock
|
||||
#: view:stock.production.lot.revision:0
|
||||
msgid "Production Lot Revisions"
|
||||
msgstr "Herziening productie-eenheden"
|
||||
msgstr "Batchnummer herzieningen"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.location:0
|
||||
|
@ -371,7 +370,7 @@ msgstr "Leveringslocatie"
|
|||
#: model:ir.actions.act_window,name:stock.action_production_lot_form
|
||||
#: model:ir.ui.menu,name:stock.menu_action_production_lot_form
|
||||
msgid "Production Lots"
|
||||
msgstr "Productie-eenheden"
|
||||
msgstr "Batchnummers"
|
||||
|
||||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
|
@ -425,9 +424,7 @@ msgstr "Locatieadres"
|
|||
#. module: stock
|
||||
#: help:stock.move,prodlot_id:0
|
||||
msgid "Production lot is used to put a serial number on the production"
|
||||
msgstr ""
|
||||
"Productie-eenheid wordt gebruikt om een serienummer aan de productie toe te "
|
||||
"voegen."
|
||||
msgstr "Batchnummers worden gebruikt om productie-eenheden te identificeren."
|
||||
|
||||
#. module: stock
|
||||
#: model:stock.location,name:stock.stock_location_13
|
||||
|
@ -493,8 +490,7 @@ msgstr "Voorraadlocatie"
|
|||
#. module: stock
|
||||
#: help:product.product,track_production:0
|
||||
msgid "Force to use a Production Lot during production order"
|
||||
msgstr ""
|
||||
"Forceer deze op een productie-eenheid te gebruiken tijdens de productieorder"
|
||||
msgstr "Forceer het gebruik van een batchnummer bij productieorders"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -537,7 +533,7 @@ msgstr "Leveringskalender"
|
|||
#. module: stock
|
||||
#: field:product.product,track_incoming:0
|
||||
msgid "Track Incomming Lots"
|
||||
msgstr "Traceer inkomende pakketten"
|
||||
msgstr "Traceer binnenkomende batches"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.act_window,name:stock.act_stock_product_location_open
|
||||
|
@ -552,7 +548,7 @@ msgstr "STOCK_SAVE_AS"
|
|||
#. module: stock
|
||||
#: model:ir.model,name:stock.model_stock_report_prodlots
|
||||
msgid "Stock report by production lots"
|
||||
msgstr "Voorraadrapport met productie-eenheden"
|
||||
msgstr "Voorraadrapport met batchnummers"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.location,stock_virtual:0
|
||||
|
@ -598,7 +594,7 @@ msgstr "Nieuw ontvangstbon aanmaken"
|
|||
#. module: stock
|
||||
#: wizard_field:stock.move.track,init,quantity:0
|
||||
msgid "Quantity per lot"
|
||||
msgstr "Aantal per eenheid"
|
||||
msgstr "Aantal per batch"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.act_window,name:stock.action_move_form2
|
||||
|
@ -661,7 +657,7 @@ msgstr "Verwachte verzenddatum"
|
|||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
msgid "Shipping Address :"
|
||||
msgstr ""
|
||||
msgstr "Afleveradres :"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.tracking:0
|
||||
|
@ -727,7 +723,7 @@ msgstr "Van"
|
|||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
msgid "weight"
|
||||
msgstr ""
|
||||
msgstr "gewicht"
|
||||
|
||||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
|
@ -742,7 +738,7 @@ msgstr "Factuurcontrole"
|
|||
#. module: stock
|
||||
#: model:ir.model,name:stock.model_stock_production_lot_revision
|
||||
msgid "Production lot revisions"
|
||||
msgstr "Heroverweeg productie-eenheden"
|
||||
msgstr "Batchnummer herzieningen"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
|
@ -1554,7 +1550,7 @@ msgstr "Revisiedatum"
|
|||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
msgid "Lot"
|
||||
msgstr "Overdoos"
|
||||
msgstr "Batch"
|
||||
|
||||
#. module: stock
|
||||
#: wizard_view:inventory.merge.stock.zero,init:0
|
||||
|
@ -1628,7 +1624,7 @@ msgstr "Leveringsvoorwaarden"
|
|||
#: rml:lot.stock.overview:0
|
||||
#: rml:lot.stock.overview_all:0
|
||||
msgid "Total:"
|
||||
msgstr ""
|
||||
msgstr "Totaal:"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -1731,7 +1727,7 @@ msgstr "Magazijnen"
|
|||
#. module: stock
|
||||
#: help:product.product,track_outgoing:0
|
||||
msgid "Force to use a Production Lot during deliveries"
|
||||
msgstr "Forceer om productie-eenheiden te gebruiken om te leveren"
|
||||
msgstr "Forceer het gebruik van batchnummers bij leveringen"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
|
@ -1790,7 +1786,7 @@ msgstr "Product eenh."
|
|||
#: rml:lot.stock.overview:0
|
||||
#: rml:lot.stock.overview_all:0
|
||||
msgid "Variants"
|
||||
msgstr ""
|
||||
msgstr "Varianten"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.location,posx:0
|
||||
|
@ -1870,7 +1866,7 @@ msgstr "STOCK_MEDIA_PAUSE"
|
|||
#. module: stock
|
||||
#: view:product.product:0
|
||||
msgid "Lots"
|
||||
msgstr "Aantallen"
|
||||
msgstr "Batches"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.picking,move_type:0
|
||||
|
@ -1880,7 +1876,7 @@ msgstr "Allen te gelijk"
|
|||
#. module: stock
|
||||
#: field:product.product,track_outgoing:0
|
||||
msgid "Track Outging Lots"
|
||||
msgstr "Uitgaande voorraadeenheden"
|
||||
msgstr "Traceer uitgaande batches"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.act_window,name:stock.action_stock_line_date
|
||||
|
@ -1903,7 +1899,7 @@ msgstr "STOCK_FIND"
|
|||
#. module: stock
|
||||
#: view:stock.inventory:0
|
||||
msgid "Lot Inventory"
|
||||
msgstr "Partijvoorraad"
|
||||
msgstr "Batchvoorraad"
|
||||
|
||||
#. module: stock
|
||||
#: help:stock.location,chained_auto_packing:0
|
||||
|
@ -2088,7 +2084,7 @@ msgstr "terp-project"
|
|||
#: model:ir.ui.menu,name:stock.menu_stock_report_prodlots
|
||||
#: view:stock.report.prodlots:0
|
||||
msgid "Stock by Lots"
|
||||
msgstr "In voorraad per verpakkingseenheid"
|
||||
msgstr "Voorraad per batch"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.move,auto_validate:0
|
||||
|
@ -2199,7 +2195,7 @@ msgstr "STOCK_REVERT_TO_SAVED"
|
|||
#. module: stock
|
||||
#: field:product.product,track_production:0
|
||||
msgid "Track Production Lots"
|
||||
msgstr "Traceerd productie-eenheden"
|
||||
msgstr "Traceer productiebatches"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
|
@ -2232,7 +2228,7 @@ msgstr "stock.picking.move.wizard"
|
|||
#: field:stock.move,prodlot_id:0
|
||||
#: view:stock.production.lot:0
|
||||
msgid "Production Lot"
|
||||
msgstr "Productie-eenheid."
|
||||
msgstr "Productie batch"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.ui.menu,name:stock.menu_traceability
|
||||
|
|
|
@ -7,13 +7,13 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
|
||||
"PO-Revision-Date: 2010-06-13 15:17+0000\n"
|
||||
"PO-Revision-Date: 2010-06-14 14:56+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-14 03:42+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-06-16 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#. module: stock
|
||||
|
@ -86,7 +86,7 @@ msgstr "JM"
|
|||
#. module: stock
|
||||
#: model:ir.actions.wizard,name:stock.return_picking
|
||||
msgid "Return packing"
|
||||
msgstr "Lista przesunięć zwrotnych"
|
||||
msgstr "Zwrot"
|
||||
|
||||
#. module: stock
|
||||
#: field:product.category,property_stock_journal:0
|
||||
|
@ -103,7 +103,7 @@ msgstr "Wypełnij inwentaryzację dla podanej strefy mag."
|
|||
#: view:stock.picking:0
|
||||
#: field:stock.picking.move.wizard,picking_id:0
|
||||
msgid "Packing list"
|
||||
msgstr "Lista przesunięć"
|
||||
msgstr "Pobranie"
|
||||
|
||||
#. module: stock
|
||||
#: rml:lot.stock.overview:0
|
||||
|
@ -206,7 +206,7 @@ msgstr "Wykonaj paczkę (przesunięcie)"
|
|||
#. module: stock
|
||||
#: wizard_view:stock.partial_picking,end2:0
|
||||
msgid "Packing result"
|
||||
msgstr "Rezultat listy przesunięć"
|
||||
msgstr "Rezultat pobrania"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -708,7 +708,7 @@ msgstr "terp-stock"
|
|||
#. module: stock
|
||||
#: rml:stock.picking.list:0
|
||||
msgid "Packing List:"
|
||||
msgstr "Lista przesunięć:"
|
||||
msgstr "Pobranie:"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -748,7 +748,7 @@ msgstr "Wersja partii produkcyjnej"
|
|||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
msgid "Packing Done"
|
||||
msgstr "Listę przesunięć wykonano"
|
||||
msgstr "Pobranie wykonane"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.move,state:0
|
||||
|
@ -762,7 +762,7 @@ msgstr "Oczekiwanie"
|
|||
#: model:ir.ui.menu,name:stock.menu_action_picking_tree7
|
||||
#: model:ir.ui.menu,name:stock.menu_picking_waiting
|
||||
msgid "Available Packing"
|
||||
msgstr "Dostępne listy przesunięć"
|
||||
msgstr "Dostępne pobrania"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.model,name:stock.model_stock_warehouse
|
||||
|
@ -815,7 +815,7 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:stock.menu_action_picking_all
|
||||
#: wizard_field:stock.picking.make,init,pickings:0
|
||||
msgid "Packing"
|
||||
msgstr "Listy przesunięć"
|
||||
msgstr "Pobrania"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -988,7 +988,7 @@ msgstr ""
|
|||
#. module: stock
|
||||
#: wizard_view:stock.partial_picking,end2:0
|
||||
msgid "The packing has been successfully made !"
|
||||
msgstr "Lista przesunięć zostało poprawnie wykonana !"
|
||||
msgstr "Pobranie wykonano poprawnie !"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.move,address_id:0
|
||||
|
@ -1158,13 +1158,13 @@ msgstr ""
|
|||
#. module: stock
|
||||
#: view:stock.picking:0
|
||||
msgid "Input Packing List"
|
||||
msgstr "Lista przesunięć wchodzących"
|
||||
msgstr "Przyjęcie zewnętrzne"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.model,name:stock.model_stock_picking
|
||||
#: field:stock.move,picking_id:0
|
||||
msgid "Packing List"
|
||||
msgstr "Lista przesunięć"
|
||||
msgstr "Pobranie"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -1205,7 +1205,7 @@ msgstr ""
|
|||
#. module: stock
|
||||
#: selection:stock.picking,invoice_state:0
|
||||
msgid "Not from Packing"
|
||||
msgstr "Nie z listy przesunięć"
|
||||
msgstr "Nie z pobrania"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.location:0
|
||||
|
@ -1299,7 +1299,7 @@ msgstr "Metoda dostawy"
|
|||
#. module: stock
|
||||
#: model:ir.actions.wizard,name:stock.partial_picking
|
||||
msgid "Partial packing"
|
||||
msgstr "Częściowa lista przesunięć"
|
||||
msgstr "Pobranie częściowe"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -1370,7 +1370,7 @@ msgstr "Strefa magazynowa"
|
|||
#. module: stock
|
||||
#: field:stock.picking,invoice_state:0
|
||||
msgid "Invoice Status"
|
||||
msgstr "Stan faktury"
|
||||
msgstr "Fakturowanie"
|
||||
|
||||
#. module: stock
|
||||
#: rml:lot.location:0
|
||||
|
@ -1572,7 +1572,7 @@ msgstr "Ilość (JS)"
|
|||
#: model:ir.actions.act_window,name:stock.action_picking_tree5
|
||||
#: model:ir.ui.menu,name:stock.menu_action_picking_tree5
|
||||
msgid "Packing to Process"
|
||||
msgstr "Listy przesunięć do obróbki"
|
||||
msgstr "Pobrania do wykonania"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -1588,12 +1588,12 @@ msgstr "Ustaw jako dostępne"
|
|||
#: model:ir.actions.wizard,name:stock.make_picking
|
||||
#: wizard_view:stock.picking.make,init:0
|
||||
msgid "Make packing"
|
||||
msgstr "Wykonaj listę przesunięć"
|
||||
msgstr "Wykonaj pobranie"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.picking,backorder_id:0
|
||||
msgid "Back Order"
|
||||
msgstr "Zamówienie zaległe"
|
||||
msgstr "Pobranie częściowe"
|
||||
|
||||
#. module: stock
|
||||
#: selection:stock.location,icon:0
|
||||
|
@ -1770,7 +1770,7 @@ msgstr "Zwrot"
|
|||
#. module: stock
|
||||
#: field:stock.picking,auto_picking:0
|
||||
msgid "Auto-Packing"
|
||||
msgstr "Auto-przesunięcie"
|
||||
msgstr "Auto-pobranie"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.move,product_uos:0
|
||||
|
@ -2172,7 +2172,7 @@ msgstr ""
|
|||
#: model:ir.ui.menu,name:stock.menu_action_picking_tree3
|
||||
#: model:ir.ui.menu,name:stock.menu_action_picking_tree8
|
||||
msgid "Confirmed Packing Waiting Availability"
|
||||
msgstr "Potwierdzone listy przesunięć oczekujące na dostępność"
|
||||
msgstr "Potwierdzone pobrania oczekujące na dostępność"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.location,posy:0
|
||||
|
@ -2257,7 +2257,7 @@ msgstr "Data zamówienia"
|
|||
#. module: stock
|
||||
#: selection:stock.invoice_onshipping,init,type:0
|
||||
msgid "Supplier Invoice"
|
||||
msgstr "Faktura dostawcy"
|
||||
msgstr "Faktura od dostawcy"
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.act_window,name:stock.action_location_form
|
||||
|
|
|
@ -0,0 +1,317 @@
|
|||
<?xml version="1.0"?>
|
||||
<document filename="test.pdf">
|
||||
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
|
||||
<pageTemplate id="first">
|
||||
<frame id="first" x1="0.0" y1="57.0" width="538" height="728"/>
|
||||
</pageTemplate>
|
||||
</template>
|
||||
<stylesheet>
|
||||
<blockTableStyle id="Standard_Outline">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table_Address_detail">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table_Title_String">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Header_Order_Reference_Tbl">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
|
||||
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Content_Order_Reference_Table">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
|
||||
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Move_Line_Header">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Move_Line_Contect_Assign_State">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="5,-1" stop="5,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="6,-1" stop="6,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Move_Line_Content_Other_State">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="5,-1" stop="5,-1"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
</initialize>
|
||||
<paraStyle name="Standard" fontName="Times-Roman"/>
|
||||
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Caption" fontName="Times-Italic" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Index" fontName="Times-Roman"/>
|
||||
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Table Contents" fontName="Times-Roman"/>
|
||||
<paraStyle name="Footer" fontName="Times-Roman"/>
|
||||
<paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER"/>
|
||||
<paraStyle name="Horizontal Line" fontName="Times-Roman" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
|
||||
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_5cm_Above_Space" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_1cm_above_space" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="3.0" spaceAfter="0.0"/>
|
||||
</stylesheet>
|
||||
<images/>
|
||||
<story>
|
||||
<para style="terp_default_8">[[ repeatIn(objects,'picking') ]] </para>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="269.0,269.0" style="Table_Address_detail">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.title) or '' ]] [[ picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.name ]]</para>
|
||||
<para style="terp_default_9">[[ picking.address_id and picking.address_id.street or '' ]]</para>
|
||||
<para style="terp_default_9">[[ picking.address_id and picking.address_id.zip or '' ]] [[ picking.address_id and picking.address_id.city or '']]</para>
|
||||
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">[[ picking.sale_id and picking.sale_id.partner_shipping_id and 'Shipping Address :' or removeParentNode('para') ]] </para>
|
||||
<para style="terp_default_9">[[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.title) or '' ]] [[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.name) or '' ]] </para>
|
||||
<para style="terp_default_9">[[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.street) or '' ]] </para>
|
||||
<para style="terp_default_9">[[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.zip) or '' ]] [[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.city) or '' ]] [[ (picking.address_id and picking.address_id.state_id and picking.address_id.state_id.name) or '' ]] </para>
|
||||
<para style="terp_default_9">[[ (picking.address_id and picking.address_id.country_id and picking.address_id.country_id.name) or '' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="538.0" style="Table_Title_String">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_header">Packing List: [[ picking.name ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="123.0,134.0,133.0,134.0" style="Header_Order_Reference_Tbl">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Order(Origin)</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Recipient</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Expected Shipping Date </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre"> Weight</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="123.0,134.0,133.0,134.0" style="Content_Order_Reference_Table">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ picking.origin ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.title) or '' ]] [[ (picking.sale_id and picking.sale_id.partner_shipping_id and picking.sale_id.partner_shipping_id.name) or '' ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ formatLang(picking.min_date,date_time = True) ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_8">[[ 'weight' in picking._columns.keys() and picking.weight or '']] </para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_5cm_Above_Space">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="196.0,68.0,56.0,61.0,73.0,70.0" repeatRows="1" style="Move_Line_Header">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Description</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Centre">Tracking Lot</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Centre">Lot</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">State</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details_Centre">Quantity</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_Details">Location</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<section>
|
||||
<para style="terp_default_8">[[ repeatIn([line for line in picking.move_lines if (line.state == 'assigned' )],'move_lines') ]]</para>
|
||||
<blockTable colWidths="197.0,68.0,61.0,57,46.0,26.0,74.0" style="Move_Line_Contect_Assign_State">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[ [[ move_lines.product_id.default_code ]] ] [[ move_lines.product_id.name ]] [[ move_lines.product_id.variants or '']] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ move_lines.tracking_id and move_lines.tracking_id.name or '' ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (move_lines.prodlot_id and move_lines.prodlot_id.name) or '' ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ move_lines.state ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ move_lines.product_qty ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ move_lines.product_uom.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (move_lines.location_id and move_lines.location_id.name) or '' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</section>
|
||||
<para style="terp_default_5cm_Above_Space">[[ (line.state == 'done' or line.state == 'confirmed') and removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_Bold_9">Non Assigned Products: [[ ( line.state == 'assigned' or line.state == 'done' or line.state == 'confirmed' ) and removeParentNode('para') ]]</para>
|
||||
<para style="terp_default_1cm_above_space">[[ (line.state == 'done' or line.state == 'confirmed') and removeParentNode('para') ]]</para>
|
||||
<section>
|
||||
<para style="terp_default_8">[[ repeatIn([line for line in picking.move_lines if (line.state != 'assigned' )],'move_lines') ]]</para>
|
||||
<blockTable colWidths="257.0,57.0,62.0,46.0,26.0,74.0" style="Move_Line_Content_Other_State">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[ [[ move_lines.product_id.default_code ]] ] [[ move_lines.product_id.name ]] [[ move_lines.product_id.variants or '']]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (move_lines.prodlot_id and move_lines.prodlot_id.name) or '' ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ move_lines.state ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ move_lines.product_qty ]] </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ move_lines.product_uom.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ (move_lines.location_id and move_lines.location_id.name) or '' ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="terp_default_2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</section>
|
||||
<para style="terp_default_9">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="Standard">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</story>
|
||||
</document>
|
|
@ -32,4 +32,5 @@ class picking(report_sxw.rml_parse):
|
|||
})
|
||||
|
||||
report_sxw.report_sxw('report.stock.picking.list','stock.picking','addons/stock/report/picking.rml',parser=picking)
|
||||
report_sxw.report_sxw('report.stock.packing.list','stock.picking','addons/stock/report/packing.rml',parser=picking)
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -84,7 +84,6 @@
|
|||
<separator orientation="vertical"/>
|
||||
<field name="product_id"/>
|
||||
<field name="partner_id" context="{'contact_display':'partner'}"/>
|
||||
<field name="date_planned"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
|
@ -97,6 +96,8 @@
|
|||
<filter string="Dest. Location" name="dest_location" icon="terp-gtk-jump-to-ltr" context="{'group_by':'location_dest_id'}"/>
|
||||
<filter string="State" name="group_state" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Company" name="group_state" icon="terp-stock_effects-object-colorize" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-month" context="{'group_by':'day'}"/>
|
||||
<filter string="Month" icon="terp-go-month" context="{'group_by':'date_planned'}"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}"/>
|
||||
|
@ -105,7 +106,10 @@
|
|||
<group expand="0" string="Extended options..." groups="base.group_extended">
|
||||
<field name="location_id" widget = "selection"/>
|
||||
<field name="location_dest_id" widget = "selection"/>
|
||||
<field name="state"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<newline/>
|
||||
<field name="date_planned"/>
|
||||
</group>
|
||||
|
||||
</search>
|
||||
|
@ -169,7 +173,7 @@
|
|||
domain="[('state','=','done')]"
|
||||
help="Analysis on real stock."/>
|
||||
|
||||
<filter string="Virtual"
|
||||
<filter string="Future"
|
||||
icon="terp-camera_test"
|
||||
domain="[('state','in',('assigned','done','waiting','confirmed'))]"
|
||||
help = "Analysis including future operations."/>
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
from osv import fields,osv
|
||||
import tools
|
||||
|
||||
class report_stock_picking(osv.osv):
|
||||
_name = "report.stock.picking"
|
||||
_description = "Stock Picking Report"
|
||||
_auto = False
|
||||
_columns = {
|
||||
'year': fields.char('Year',size=64,required=False, 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=128, readonly=True),
|
||||
'nbr': fields.integer('# of Lines', readonly=True),
|
||||
'nbp': fields.integer('# of Picking', readonly=True),
|
||||
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
|
||||
'product_qty': fields.float('# of Products', readonly=True),
|
||||
'product_uos_qty': fields.float('# of Products', readonly=True),
|
||||
'product_id': fields.many2one('product.product', 'Product', readonly=True),
|
||||
'date': fields.date('Date', readonly=True),
|
||||
'avg_days_to_deliver': fields.float('Avg Days to Deliver', digits=(16,2), readonly=True, group_operator="avg",
|
||||
help="Number of Avg Days to deliver"),
|
||||
'state': fields.selection([('draft', 'Draft'),('auto', 'Waiting'),('confirmed', 'Confirmed'),('assigned', 'Available'),('done', 'Done'),('cancel', 'Cancelled')], 'State'),
|
||||
'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True),
|
||||
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
||||
'invoice_state': fields.selection([
|
||||
("invoiced", "Invoiced"),
|
||||
("2binvoiced", "To Be Invoiced"),
|
||||
("none", "Not from Picking")], "Invoice Status",readonly=True),
|
||||
'min_date': fields.date('Expected Date',help="Expected date for Picking. Default it takes current date"),
|
||||
'order_date': fields.date('Order Date', help="Date of Order"),
|
||||
'date_done': fields.date('Date Done', help="Date of completion"),
|
||||
'location_id': fields.many2one('stock.location', 'Source Location', 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', 'Dest. Location', help="Location where the system will stock the finished products."),
|
||||
'max_date': fields.date('Max.Expected Date'),
|
||||
'product_uos': fields.many2one('product.uom', 'Product UOS'),
|
||||
'product_uom': fields.many2one('product.uom', 'Product UOM'),
|
||||
}
|
||||
def init(self, cr):
|
||||
tools.drop_view_if_exists(cr, 'report_stock_picking')
|
||||
cr.execute("""
|
||||
create or replace view report_stock_picking as (
|
||||
select
|
||||
min(sm.id) as id,
|
||||
date_trunc('day',sp.min_date) as min_date,
|
||||
date_trunc('day',sp.date) as order_date,
|
||||
date_trunc('day',sp.date_done) as date_done,
|
||||
date_trunc('day',sp.max_date) as max_date,
|
||||
to_char(sp.create_date, 'YYYY') as year,
|
||||
to_char(sp.create_date, 'MM') as month,
|
||||
to_char(sp.create_date, 'YYYY-MM-DD') as day,
|
||||
sp.address_id as partner_id,
|
||||
to_date(to_char(sp.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
|
||||
count(sm.id) as nbr,
|
||||
count(distinct sp.id) as nbp,
|
||||
sum(sm.product_qty) as product_qty,
|
||||
sum(sm.product_uos_qty) as product_uos_qty,
|
||||
sm.product_id as product_id,
|
||||
sm.location_dest_id as location_dest_id,
|
||||
sm.location_id as location_id,
|
||||
sp.type,
|
||||
sm.product_uos,
|
||||
sm.product_uom,
|
||||
sp.invoice_state,
|
||||
sp.company_id as company_id,
|
||||
avg(extract('epoch' from (sp.date_done-sp.create_date)))/(3600*24) as avg_days_to_deliver,
|
||||
sp.state
|
||||
from stock_move as sm
|
||||
left join stock_picking as sp ON (sm.picking_id=sp.id)
|
||||
group by sp.type,
|
||||
sp.create_date,
|
||||
sp.address_id,
|
||||
sm.product_id,
|
||||
to_char(sp.create_date, 'YYYY'),
|
||||
sm.location_dest_id,
|
||||
sm.location_id,
|
||||
to_char(sp.create_date, 'MM'),
|
||||
to_char(sp.create_date, 'YYYY-MM-DD'),
|
||||
sm.product_uos,
|
||||
sm.product_uom,
|
||||
date_trunc('day',sp.min_date),
|
||||
date_trunc('day',sp.date),
|
||||
date_trunc('day',sp.date_done),
|
||||
date_trunc('day',sp.max_date),
|
||||
sp.invoice_state,
|
||||
sp.company_id,
|
||||
sp.state
|
||||
|
||||
)""")
|
||||
report_stock_picking()
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
@ -0,0 +1,136 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<!--
|
||||
Stock Picking Report
|
||||
-->
|
||||
|
||||
<record id="view_report_report_stock_picking_tree" model="ir.ui.view">
|
||||
<field name="name">report.stock.picking.tree</field>
|
||||
<field name="model">report.stock.picking</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Picking">
|
||||
<field name="year" invisible="1"/>
|
||||
<field name="month" invisible="1"/>
|
||||
<field name="day" invisible="1"/>
|
||||
<field name="date" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
<field name="product_id" invisible="1"/>
|
||||
<field name="min_date" invisible="1"/>
|
||||
<field name="order_date" invisible="1"/>
|
||||
<field name="date_done" invisible="1"/>
|
||||
<field name="max_date" invisible="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="invoice_state" invisible="1"/>
|
||||
<field name="state" invisible="1"/>
|
||||
<field name="product_qty" sum="# of Products" />
|
||||
<field name="nbp" sum="# of Pickings" />
|
||||
<field name="nbr" sum="# of Lines" />
|
||||
<field name="avg_days_to_deliver" avg='Avg Days to Deliver'/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_report_report_stock_picking_graph" model="ir.ui.view">
|
||||
<field name="name">report.stock.picking.graph</field>
|
||||
<field name="model">report.stock.picking</field>
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph orientation="horizontal" string="Picking" type="bar">
|
||||
<field name="partner_id"/>
|
||||
<field name="nbr" operator="+"/>
|
||||
<field name="product_qty" operator="+"/>
|
||||
<field name="nbp" operator="+"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_report_report_stock_picking_filter" model="ir.ui.view">
|
||||
<field name="name">report.stock.picking.select</field>
|
||||
<field name="model">report.stock.picking</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search">
|
||||
<group col="16" colspan="6">
|
||||
<filter icon="terp-go-year" string=" 365 Days "
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')),('date','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Picking in last 365 days"/>
|
||||
<filter icon="terp-go-month" string=" 30 Days "
|
||||
name="month"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Picking in last 30 days"/>
|
||||
<filter icon="terp-go-week"
|
||||
string=" 7 Days "
|
||||
separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Picking during last 7 days"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Todo" icon="terp-gtk-go-back-rtl" domain="[('state','in',('draft','auto','confirmed','assigned'))]"/>
|
||||
<filter string="Done" icon="terp-dialog-close" domain="[('state','=','done')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Partner" name="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Shipping Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Invoice Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'invoice_state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-month" domain="[]" context="{'group_by':'day'}"/>
|
||||
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}"/>
|
||||
<filter string="Year" icon="terp-go-year" domain="[]" context="{'group_by':'year'}"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Extended options..." groups="base.group_extended">
|
||||
<field name="type"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="min_date"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="max_date"/>
|
||||
<newline/>
|
||||
<field name="invoice_state"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="order_date"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date_done"/>
|
||||
</group>
|
||||
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_report_report_stock_picking" model="ir.actions.act_window">
|
||||
<field name="name">Picking</field>
|
||||
<field name="res_model">report.stock.picking</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,graph</field>
|
||||
<field name="view_id" ref="view_report_report_stock_picking_tree"/>
|
||||
<field name="search_view_id" ref="view_report_report_stock_picking_filter"/>
|
||||
<field name="context">{'search_default_Partner':1,'search_default_month':1,'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_report_stock_picking_tree">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_report_report_stock_picking_tree"/>
|
||||
<field name="act_window_id" ref="action_report_report_stock_picking"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_report_report_stock_picking_graph">
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="view_mode">graph</field>
|
||||
<field name="view_id" ref="view_report_report_stock_picking_graph"/>
|
||||
<field name="act_window_id" ref="action_report_report_stock_picking"/>
|
||||
</record>
|
||||
|
||||
<menuitem name="Picking" action="action_report_report_stock_picking" id="menu_report_report_stock_pickings_tree" parent="next_id_61"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
@ -5,6 +5,8 @@
|
|||
"access_stock_warehouse_user","stock.warehouse.user","model_stock_warehouse","base.group_user",1,0,0,0
|
||||
"access_stock_location_manager","stock.location.manager","model_stock_location","stock.group_stock_manager",1,1,1,1
|
||||
"access_stock_location_user","stock.location.user","model_stock_location","base.group_user",1,0,0,0
|
||||
"access_stock_journal_user","stock.journal.user","model_stock_journal","base.group_user",1,0,0,0
|
||||
"access_stock_journal_manager","stock.journal.manager","model_stock_journal","stock.group_stock_manager",1,1,1,1
|
||||
"access_stock_picking_move_wizard","stock.picking.move.wizard","model_stock_picking_move_wizard","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_tracking","stock.tracking","model_stock_tracking","stock.group_stock_user",1,1,1,0
|
||||
"access_stock_picking","stock.picking","model_stock_picking","stock.group_stock_user",1,1,1,1
|
||||
|
@ -14,7 +16,7 @@
|
|||
"access_stock_inventory","stock.inventory","model_stock_inventory","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_inventory_line","stock.inventory.line","model_stock_inventory_line","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_report_prodlots","stock.report.prodlots","model_stock_report_prodlots","stock.group_stock_manager",1,0,0,0
|
||||
"access_stock_location_product_manager","stock.location product manager","model_stock_location","product.group_product_manager",1,0,0,0
|
||||
"access_stock_location_product_manager","stock.location product manager","model_stock_location","product.group_product_manager",1,1,1,1
|
||||
"access_stock_lines_date","report.stock.lines.date all","model_report_stock_lines_date",stock.group_stock_user,1,0,0,0
|
||||
"access_stock_report_tracklots","stock.report.tracklots","model_stock_report_tracklots","stock.group_stock_user",1,1,1,1
|
||||
"access_report_products_to_received_planned","report.products.to.received.planned","model_report_products_to_received_planned","stock.group_stock_user",1,1,1,1
|
||||
|
@ -24,17 +26,28 @@
|
|||
"access_stock_move_scrap","stock.move.scrap","model_stock_move_scrap","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_move_split","stock.move.split","model_stock_move_split","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_move_split_lines","stock.move.split.lines","model_stock_move_split_lines","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_move_split_lines_exist","stock.move.split.lines.exist","model_stock_move_split_lines_exist","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_inventory_set_stock_zero","stock.inventory.set.stock.zero","model_stock_inventory_set_stock_zero","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_fill_inventory","stock.fill.inventory","model_stock_fill_inventory","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_inventory_line_split","stock.inventory.line.split","model_stock_inventory_line_split","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_invoice_onshipping","stock.invoice.onshipping","model_stock_invoice_onshipping","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_location_product","stock.location.product","model_stock_location_product","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_traceability_upstream","stock.traceability.upstream","model_stock_traceability_upstream","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_traceability_downstream","stock.traceability.downstream","model_stock_traceability_downstream","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_traceability_lot_upstream","stock.traceability.lot.upstream","model_stock_traceability_lot_upstream","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_traceability_lot_downstream","stock.traceability.lot.downstream","model_stock_traceability_lot_downstream","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_location_product","stock.location.product","model_stock_location_product","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_location_product_manager","stock.location.product manager","model_stock_location_product","stock.group_stock_manager",1,1,1,1
|
||||
"access_stock_traceability_upstream","stock.traceability.upstream","model_stock_traceability_upstream","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_traceability_downstream","stock.traceability.downstream","model_stock_traceability_downstream","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_traceability_lot_upstream","stock.traceability.lot.upstream","model_stock_traceability_lot_upstream","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_traceability_lot_downstream","stock.traceability.lot.downstream","model_stock_traceability_lot_downstream","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_partial_picking",stock.partial.picking","model_stock_partial_picking",,1,1,1,1
|
||||
"access_stock_partial_move","stock.partial.move","model_stock_partial_move",,1,1,1,1
|
||||
"access_stock_inventory_merge","stock.inventory.merge","model_stock_inventory_merge","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_change_standard_price","stock.change.standard.price","model_stock_change_standard_price","stock.group_stock_user",1,0,0,0
|
||||
"access_action_traceability","action.traceability","model_action_traceability","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_split_into","stock.split.into","model_stock_split_into","stock.group_stock_user",1,0,0,0
|
||||
"access_stock_split_into_manager","stock.split.into","model_stock_split_into","stock.group_stock_manager",1,1,1,1
|
||||
"access_report_stock_move","report.stock.move","model_report_stock_move","stock.group_stock_user",1,1,1,1
|
||||
"access_report_stock_inventory","report.stock.inventory","model_report_stock_inventory","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_replacement","stock.replacement","model_stock_replacement","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_replacement_result","stock.replacement.result","model_stock_replacement_result","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_ups","stock.ups","model_stock_ups","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_ups_final","stock.ups.final","model_stock_ups_final","stock.group_stock_user",1,1,1,1
|
||||
"access_stock_ups_upload","stock.ups.upload","model_stock_ups_upload","stock.group_stock_user",1,1,1,1
|
Can't render this file because it contains an unexpected character in line 40 and column 53.
|
|
@ -49,6 +49,17 @@ class stock_incoterms(osv.osv):
|
|||
|
||||
stock_incoterms()
|
||||
|
||||
class stock_journal(osv.osv):
|
||||
_name = "stock.journal"
|
||||
_description = "Stock Journal"
|
||||
_columns = {
|
||||
'name': fields.char('Stock Journal', size=32, required=True),
|
||||
'user_id': fields.many2one('res.users','Responsible'),
|
||||
}
|
||||
_defaults = {
|
||||
'user_id': lambda s,c,u,ctx: u
|
||||
}
|
||||
stock_journal()
|
||||
|
||||
#----------------------------------------------------------
|
||||
# Stock Location
|
||||
|
@ -159,7 +170,6 @@ class stock_location(osv.osv):
|
|||
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the stock location without removing it."),
|
||||
'usage': fields.selection([('supplier', 'Supplier Location'), ('view', 'View'), ('internal', 'Internal Location'), ('customer', 'Customer Location'), ('inventory', 'Inventory'), ('procurement', 'Procurement'), ('production', 'Production'), ('transit', 'Transit Location for Inter-Companies Transfers')], 'Location Type', required=True),
|
||||
'allocation_method': fields.selection([('fifo', 'FIFO'), ('lifo', 'LIFO'), ('nearest', 'Nearest')], 'Allocation Method', required=True),
|
||||
|
||||
'complete_name': fields.function(_complete_name, method=True, type='char', size=100, string="Location Name"),
|
||||
|
||||
'stock_real': fields.function(_product_qty_available, method=True, type='float', string='Real Stock', multi="stock"),
|
||||
|
@ -169,6 +179,7 @@ class stock_location(osv.osv):
|
|||
'location_id': fields.many2one('stock.location', 'Parent Location', select=True, ondelete='cascade'),
|
||||
'child_ids': fields.one2many('stock.location', 'location_id', 'Contains'),
|
||||
|
||||
'chained_journal_id': fields.many2one('stock.journal', 'Chained Journal'),
|
||||
'chained_location_id': fields.many2one('stock.location', 'Chained Location If Fixed'),
|
||||
'chained_location_type': fields.selection([('none', 'None'), ('customer', 'Customer'), ('fixed', 'Fixed Location')],
|
||||
'Chained Location Type', required=True),
|
||||
|
@ -181,6 +192,8 @@ class stock_location(osv.osv):
|
|||
"validated automatically. With 'Manual Operation', the stock move has to be validated "\
|
||||
"by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
|
||||
),
|
||||
'chained_picking_type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', help="Shipping type specify of the chained move, goods coming in or going out."),
|
||||
'chained_company_id': fields.many2one('res.company', 'Chained Company', help='Set here the belonging company of the chained move'),
|
||||
'chained_delay': fields.integer('Chained lead time (days)'),
|
||||
'address_id': fields.many2one('res.partner.address', 'Location Address'),
|
||||
'icon': fields.selection(tools.icons, 'Icon', size=64),
|
||||
|
@ -225,7 +238,7 @@ class stock_location(osv.osv):
|
|||
elif location.chained_location_type == 'fixed':
|
||||
result = location.chained_location_id
|
||||
if result:
|
||||
return result, location.chained_auto_packing, location.chained_delay
|
||||
return result, location.chained_auto_packing, location.chained_delay, location.chained_journal_id and location.chained_journal_id.id or False, location.chained_company_id and location.chained_company_id.id or False, location.chained_picking_type
|
||||
return result
|
||||
|
||||
def picking_type_get(self, cr, uid, from_location, to_location, context={}):
|
||||
|
@ -557,7 +570,7 @@ class stock_picking(osv.osv):
|
|||
'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
|
||||
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the picking without removing it."),
|
||||
'note': fields.text('Notes'),
|
||||
|
||||
'stock_journal_id': fields.many2one('stock.journal','Stock Journal'),
|
||||
'location_id': fields.many2one('stock.location', 'Location', help="Keep empty if you produce at the location where the finished products are needed." \
|
||||
"Set a location if you produce at a fixed location. This can be a partner location " \
|
||||
"if you subcontract the manufacturing operations."),
|
||||
|
@ -589,7 +602,7 @@ class stock_picking(osv.osv):
|
|||
("2binvoiced", "To Be Invoiced"),
|
||||
("none", "Not from Picking")], "Invoice Status",
|
||||
select=True, required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True,select=1),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1),
|
||||
}
|
||||
_defaults = {
|
||||
'name': lambda self, cr, uid, context: '/',
|
||||
|
@ -599,7 +612,7 @@ class stock_picking(osv.osv):
|
|||
'type': lambda *a: 'in',
|
||||
'invoice_state': lambda *a: 'none',
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock_picking', context=c)
|
||||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.picking', context=c)
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default=None, context={}):
|
||||
|
@ -1248,7 +1261,6 @@ class stock_production_lot(osv.osv):
|
|||
'revisions': fields.one2many('stock.production.lot.revision', 'lot_id', 'Revisions'),
|
||||
'company_id': fields.many2one('res.company','Company',select=1),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'stock.lot.serial'),
|
||||
|
@ -1290,6 +1302,7 @@ stock_production_lot_revision()
|
|||
# location_dest_id is only used for predicting futur stocks
|
||||
#
|
||||
class stock_move(osv.osv):
|
||||
|
||||
def _getSSCC(self, cr, uid, context={}):
|
||||
cr.execute('select id from stock_tracking where create_uid=%s order by id desc limit 1', (uid,))
|
||||
res = cr.fetchone()
|
||||
|
@ -1367,7 +1380,7 @@ class stock_move(osv.osv):
|
|||
\nThe state is \'Waiting\' if the move is waiting for another one.'),
|
||||
'price_unit': fields.float('Unit Price',
|
||||
digits_compute= dp.get_precision('Account')),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True,select=1),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=True, select=1),
|
||||
'partner_id': fields.related('picking_id','address_id','partner_id',type='many2one', relation="res.partner", string="Partner"),
|
||||
'backorder_id': fields.related('picking_id','backorder_id',type='many2one', relation="stock.picking", string="Back Order"),
|
||||
'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin"),
|
||||
|
@ -1393,7 +1406,8 @@ class stock_move(osv.osv):
|
|||
move_list = self.pool.get('stock.move').read(cr, uid, context['move_line'][0], ['location_dest_id'])
|
||||
return move_list and move_list['location_dest_id'][0] or False
|
||||
if context.get('address_out_id', False):
|
||||
return self.pool.get('res.partner.address').browse(cr, uid, context['address_out_id'], context).partner_id.property_stock_customer.id
|
||||
property_out = self.pool.get('res.partner.address').browse(cr, uid, context['address_out_id'], context).partner_id.property_stock_customer
|
||||
return property_out and property_out.id or False
|
||||
return False
|
||||
|
||||
def _default_location_source(self, cr, uid, context={}):
|
||||
|
@ -1428,14 +1442,6 @@ class stock_move(osv.osv):
|
|||
default = default.copy()
|
||||
return super(stock_move, self).copy(cr, uid, id, default, context)
|
||||
|
||||
def create(self, cr, user, vals, context=None):
|
||||
# Check that the stock.move is in draft state at creation to force
|
||||
# passing through button_confirm
|
||||
if vals.get('state','draft') not in ('draft','done','waiting'):
|
||||
logger = netsvc.Logger()
|
||||
logger.notifyChannel("code", netsvc.LOG_WARNING, "All new stock.move must be in state draft at the creation !")
|
||||
return super(stock_move, self).create(cr, user, vals, context)
|
||||
|
||||
def _auto_init(self, cursor, context):
|
||||
res = super(stock_move, self)._auto_init(cursor, context)
|
||||
cursor.execute('SELECT indexname \
|
||||
|
@ -1567,8 +1573,9 @@ class stock_move(osv.osv):
|
|||
|
||||
def create_chained_picking(self, cr, uid, moves, context):
|
||||
new_moves = []
|
||||
res_obj = self.pool.get('res.company')
|
||||
for picking, todo in self._chain_compute(cr, uid, moves, context).items():
|
||||
ptype = self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
|
||||
ptype = todo[0][1][5] and todo[0][1][5] or self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
|
||||
pick_name = ''
|
||||
if ptype == 'delivery':
|
||||
pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.delivery')
|
||||
|
@ -1579,17 +1586,20 @@ class stock_move(osv.osv):
|
|||
'note': picking.note,
|
||||
'move_type': picking.move_type,
|
||||
'auto_picking': todo[0][1][1] == 'auto',
|
||||
'stock_journal_id': todo[0][1][3],
|
||||
'company_id': todo[0][1][4] or res_obj._company_default_get(cr, uid, 'stock.company', context),
|
||||
'address_id': picking.address_id.id,
|
||||
|
||||
'invoice_state': 'none'
|
||||
})
|
||||
for move, (loc, auto, delay) in todo:
|
||||
# Is it smart to copy ? May be it's better to recreate ?
|
||||
for move, (loc, auto, delay, journal, company_id, ptype) in todo:
|
||||
new_id = self.pool.get('stock.move').copy(cr, uid, move.id, {
|
||||
'location_id': move.location_dest_id.id,
|
||||
'location_dest_id': loc.id,
|
||||
'date_moved': time.strftime('%Y-%m-%d'),
|
||||
'picking_id': pickid,
|
||||
'state': 'waiting',
|
||||
'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context) ,
|
||||
'move_history_ids': [],
|
||||
'date_planned': (datetime.strptime(move.date_planned, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'),
|
||||
'move_history_ids2': []}
|
||||
|
@ -1675,6 +1685,33 @@ class stock_move(osv.osv):
|
|||
wf_service.trg_write(uid, 'stock.picking', pick_id, cr)
|
||||
return count
|
||||
|
||||
def setlast_tracking(self, cr, uid, ids, context=None):
|
||||
new_move = []
|
||||
update_val = {}
|
||||
ir_sequence_obj = self.pool.get('ir.sequence')
|
||||
tracking_obj = self.pool.get('stock.tracking')
|
||||
tracking = False
|
||||
tracking = context.get('tracking', False)
|
||||
# import pdb; pdb.set_trace()
|
||||
if tracking:
|
||||
tracking_id = tracking_obj.search(cr, uid, ['name','=', tracking])
|
||||
if prodlot_id:
|
||||
update_val['prodlot_id'] = prodlot_id
|
||||
else:
|
||||
tracking_id = tracking_obj.create(cr, uid, {'name': tracking}, {'product_id': self.browse(cr, uid, ids)[0].product_id.id})
|
||||
update_val['tracking_id'] = tracking_id
|
||||
else:
|
||||
last_track = [line.tracking_id for line in self.browse(cr, uid, ids)[0].picking_id.move_lines if line.tracking_id]
|
||||
if not last_track:
|
||||
track_ids= tracking_obj.search(cr, uid, [])
|
||||
last_track = [track for track in tracking_obj.browse(cr, uid, track_ids)]
|
||||
last_track.sort(key=lambda p: p.date, reverse=True)
|
||||
last_track_id = last_track and last_track[0].id
|
||||
update_val['tracking_id'] = last_track_id
|
||||
self.write(cr, uid, ids, update_val)
|
||||
return True
|
||||
|
||||
|
||||
#
|
||||
# Cancel move => cancel others move and pickings
|
||||
#
|
||||
|
@ -1822,10 +1859,12 @@ class stock_move(osv.osv):
|
|||
for pick in picking_obj.browse(cr, uid, picking_ids):
|
||||
if all(move.state == 'done' for move in pick.move_lines):
|
||||
picking_obj.action_done(cr, uid, [pick.id])
|
||||
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
for id in ids:
|
||||
wf_service.trg_trigger(uid, 'stock.move', id, cr)
|
||||
for pick in picking_obj.browse(cr, uid, picking_ids):
|
||||
if len([move.state == 'done' for move in pick.move_lines]) == len(pick.move_lines):
|
||||
wf_service.trg_validate(uid, 'stock.picking', pick.id, 'button_done', cr)
|
||||
return True
|
||||
|
||||
def create_account_move(self, cr, uid, move,account_id,account_variation,amount, context=None):
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
<data>
|
||||
<report auto="False" id="report_product_history" model="product.product" name="stock.product.history" string="Future Stock Forecast"/>
|
||||
<report id="report_picking_list" model="stock.picking" name="stock.picking.list" string="Picking list" rml="stock/report/picking.rml"/>
|
||||
<report id="report_packing_list" model="stock.picking" name="stock.packing.list" string="Packing list" rml="stock/report/packing.rml"/>
|
||||
<report id="report_move_labels" model="stock.move" name="stock.move.label" string="Item Labels" xml="stock/report/lot_move_label.xml" xsl="stock/report/lot_move_label.xsl"/>
|
||||
<report auto="False" id="report_location_overview" model="stock.location" name="lot.stock.overview" string="Location Overview" rml="stock/report/lot_overview.rml" groups="base.group_extended"/>
|
||||
<report auto="False" id="report_lot_location" model="stock.location" name="lot.location" rml="stock/report/lot_location.rml" string="Lots by location"/>
|
||||
|
|
|
@ -313,6 +313,7 @@
|
|||
<field name="product_qty" />
|
||||
<field name="product_uom" string="UOM"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<field name="product_packaging" domain="[('product_id','=',product_id)]" groups="base.group_extended"/>
|
||||
<field name="picking_id"/>
|
||||
<field name="location_id" />
|
||||
|
@ -336,6 +337,7 @@
|
|||
<field name="product_qty" />
|
||||
<field name="product_uom" string="UOM"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<field name="product_packaging" domain="[('product_id','=',product_id)]" groups="base.group_extended"/>
|
||||
<field name="picking_id"/>
|
||||
<field name="location_id" />
|
||||
|
@ -420,6 +422,9 @@
|
|||
<field name="chained_location_id"/>
|
||||
<field name="chained_auto_packing"/>
|
||||
<field name="chained_delay"/>
|
||||
<field name="chained_journal_id"/>
|
||||
<field name="chained_picking_type"/>
|
||||
<field name="chained_company_id" widget="selection"/>
|
||||
</group>
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Localization" colspan="2"/>
|
||||
|
@ -603,37 +608,43 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Picking list">
|
||||
<group colspan="4" col="6">
|
||||
|
||||
<field name="name" readonly="1"/>
|
||||
<!-- <field name="address_id" context="{'contact_display' : 'partner'}" groups="base.group_extended"/>-->
|
||||
<field name="origin"/>
|
||||
|
||||
<field name="backorder_id" groups="base.group_extended" readonly="1"/>
|
||||
<field name="date"/>
|
||||
<field name="min_date"/>
|
||||
<field name="type"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id}">
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves">
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves" editable="top">
|
||||
<field name="name" string="Move Name"/>
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<field name="product_uom" string="UOM"/>
|
||||
<field name="picking_id"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
type="action" icon="terp-stock_effects-object-colorize"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="date_expected" string="Date Expected"/>
|
||||
<field name="state"/>
|
||||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
type="action" icon="gtk-justify-fill"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
|
||||
<button name="%(stock.move_scrap)d"
|
||||
string="Scrap Products" type="action"
|
||||
|
@ -662,10 +673,13 @@
|
|||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
|
||||
<newline/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="gtk-justify-fill"/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<button name="%(move_scrap)d" string="Scrap Move Line" type="action" icon="gtk-justify-fill"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" />
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group colspan="2">
|
||||
|
@ -715,10 +729,9 @@
|
|||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-accessories-archiver-minus" string="Back Order" domain="[('backorder_id', '<>', False)]" help="Has Back Order" />
|
||||
<separator orientation="vertical"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="name"/>
|
||||
<field name="address_id"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="8">
|
||||
|
@ -761,19 +774,28 @@
|
|||
<field name="backorder_id" groups="base.group_extended" readonly="1"/>
|
||||
<field name="date" />
|
||||
<field name="min_date"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
<field name="type" invisible="1"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id}">
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id}" >
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves" editable="top">
|
||||
<field name="name" string="Move Name"/>
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<field name="product_uom" string="UOM"/>
|
||||
<field name="picking_id" />
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="date_planned"/>
|
||||
|
@ -782,7 +804,7 @@
|
|||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
type="action" icon="gtk-justify-fill"
|
||||
type="action" icon="terp-stock_effects-object-colorize"
|
||||
groups="base.group_extended"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<button name="%(stock.move_scrap)d"
|
||||
|
@ -806,11 +828,19 @@
|
|||
<field name="date_planned"/>
|
||||
<field name="date_expected" string="Date Expected"/>
|
||||
<field groups="base.group_extended" name="product_packaging" domain="[('product_id','=',product_id)]"/>
|
||||
<newline/>
|
||||
<field name="prodlot_id" groups="base.group_extended"
|
||||
context="{'location_id':location_id, 'product_id':product_id}"
|
||||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group colspan="2">
|
||||
|
@ -863,6 +893,7 @@
|
|||
<field name="name"/>
|
||||
<field name="address_id"/>
|
||||
<field name="origin"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="10">
|
||||
|
@ -922,7 +953,6 @@
|
|||
<field name="invoice_state"/>
|
||||
<field name="state"/>
|
||||
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Picking"/>
|
||||
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the picking. Do you want to continue?"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -940,33 +970,38 @@
|
|||
<field name="backorder_id" readonly="1"/>
|
||||
<field name="origin" readonly="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id}">
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves">
|
||||
<field name="name" string="Move Name"/>
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_out_id': address_id}" >
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves" editable="top">
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<field name="product_uom" string="UOM"/>
|
||||
<field name="picking_id"/>
|
||||
<button name="%(stock.move_scrap)d"
|
||||
string="Scrap Products" type="action"
|
||||
icon="gtk-convert" context="{'scrap': True}"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','<>',False)]}"
|
||||
states="assigned,confirmed,done"
|
||||
groups="base.group_extended"/>
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="date_expected" string="Date Expected"/>
|
||||
<field name="state"/>
|
||||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
type="action" icon="gtk-justify-fill"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<button
|
||||
name="%(stock.move_scrap)d"
|
||||
string="Scrap Products" type="action"
|
||||
icon="gtk-convert"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<button name="%(action_partial_move)d" string="Partial" type="action" states="confirmed,assigned" icon="gtk-justify-fill"/>
|
||||
<button name="action_done" states="confirmed,assigned" string="Done" type="object" icon="gtk-jump-to"/>
|
||||
</tree>
|
||||
<form string="Stock Moves">
|
||||
<notebook colspan="4">
|
||||
|
@ -984,13 +1019,19 @@
|
|||
<field name="date_planned"/>
|
||||
<field name="date_expected" string="Date Expected"/>
|
||||
<field groups="base.group_extended" name="product_packaging" domain="[('product_id','=',product_id)]"/>
|
||||
<newline/>
|
||||
<field name="prodlot_id" groups="base.group_extended"
|
||||
context="{'location_id':location_id, 'product_id':product_id}"
|
||||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="gtk-justify-fill"/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<label/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group colspan="2">
|
||||
|
@ -1043,6 +1084,7 @@
|
|||
<field name="name"/>
|
||||
<field name="address_id" />
|
||||
<field name="origin"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<newline/>
|
||||
|
@ -1057,13 +1099,13 @@
|
|||
</record>
|
||||
|
||||
<record id="action_picking_tree" model="ir.actions.act_window">
|
||||
<field name="name">Outgoing Products</field>
|
||||
<field name="name">Outgoing Packings</field>
|
||||
<field name="res_model">stock.picking</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,calendar</field>
|
||||
<field name="domain">[('type','=','out')]</field>
|
||||
<field name="context">{'contact_display': 'partner'}</field>
|
||||
<field name="context">{'contact_display': 'partner', 'search_default_available': 1}</field>
|
||||
<field name="search_view_id" ref="view_picking_out_search"/>
|
||||
</record>
|
||||
<record id="action_picking_tree_out_view1_waiting" model="ir.actions.act_window.view">
|
||||
|
@ -1120,24 +1162,32 @@
|
|||
<field name="type"/>
|
||||
<field name="min_date" readonly="1"/>
|
||||
<field name="invoice_state" string="Invoice Control"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="General Information">
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id}">
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves">
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty"/>
|
||||
<field name="product_uom" string="Product Unit of Measure"/>
|
||||
<field colspan="4" name="move_lines" nolabel="1" widget="one2many_list" default_get="{'move_line':move_lines, 'address_in_id': address_id}" >
|
||||
<tree colors="grey:state in ('cancel')" string="Stock Moves" editable="top">
|
||||
<field name="product_id" readonly="1"/>
|
||||
<field name="product_qty" readonly="1"/>
|
||||
<field name="product_uom" string="UOM" readonly="1"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<field name="state"/>
|
||||
<button
|
||||
<button
|
||||
name="%(stock.track_line)d"
|
||||
string="Split in production lots"
|
||||
type="action" icon="gtk-justify-fill"
|
||||
type="action" icon="terp-stock_effects-object-colorize"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<button name="%(stock.move_scrap)d"
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="state"/>
|
||||
<button name="%(stock.move_scrap)d"
|
||||
string="Scrap Products" type="action"
|
||||
icon="gtk-convert" context="{'scrap': True}"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
|
@ -1151,23 +1201,21 @@
|
|||
<field colspan="4" context="location=location_id" name="product_id" on_change="onchange_product_id(product_id, location_id, location_dest_id, parent.address_id)"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<field name="product_uom"/>
|
||||
<field groups="product.group_uos" name="product_uos" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<field groups="product.group_uos" name="product_uos_qty"/>
|
||||
<field colspan="4" invisible="1" name="name" />
|
||||
<field groups="base.group_extended" name="date_planned"/>
|
||||
<field name="date_expected" groups="base.group_extended" string="Date Expected"/>
|
||||
<field name="date_expected" groups="base.group_extended" string="Date Expected"/>
|
||||
<field groups="product.group_uos" name="product_uos" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
<newline/>
|
||||
<newline/>
|
||||
<field groups="base.group_extended" name="product_packaging" domain="[('product_id','=',product_id)]"/>
|
||||
<newline/>
|
||||
<field name="prodlot_id" groups="base.group_extended"
|
||||
context="{'location_id':location_id, 'product_id':product_id}"
|
||||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field name="prodlot_id" groups="base.group_extended" context="{'location_id':location_id, 'product_id':product_id}" domain="[('product_id','=?',product_id)]" on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
|
||||
<newline/>
|
||||
<label/>
|
||||
<button groups="base.group_extended" name="%(track_line)d" string="Split in production lots" type="action" icon="gtk-justify-fill"/>
|
||||
<button groups="base.group_extended" name="267" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
<label/>
|
||||
<button name="275" string="Split Stock Moves" type="action" icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}" states="draft,assigned,confirmed,done"/>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group colspan="2">
|
||||
|
@ -1215,6 +1263,7 @@
|
|||
<field name="name"/>
|
||||
<field name="address_id"/>
|
||||
<field name="origin"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company" />
|
||||
</group>
|
||||
<newline/>
|
||||
|
@ -1272,6 +1321,7 @@
|
|||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="origin"/>
|
||||
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
|
||||
<field name="company_id" widget="selection"/>
|
||||
</group>
|
||||
<newline/>
|
||||
|
@ -1304,7 +1354,7 @@
|
|||
<field name="type">tree</field>
|
||||
<field eval="6" name="priority"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="grey:state in ('cancel');red:(state not in ('cancel','done')) and date_planned > current_date" string="Moves">
|
||||
<tree colors="grey:state in ('cancel');red:(state not in ('cancel','done')) and date_planned > current_date" string="Moves" editable="top">
|
||||
<field name="picking_id" select="1"/>
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" on_change="onchange_quantity(product_id, product_qty, product_uom, product_uos)"/>
|
||||
|
@ -1318,11 +1368,20 @@
|
|||
icon="gtk-justify-fill" attrs="{'invisible': [('prodlot_id','<>',False)]}"
|
||||
states="assigned,confirmed"
|
||||
groups="base.group_extended"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="date_expected"/>
|
||||
<field name="state"/>
|
||||
<button name="action_done" states="confirmed,assigned" string="Done" type="object" icon="gtk-jump-to"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -1372,7 +1431,15 @@
|
|||
context="{'location_id':location_id, 'product_id':product_id}"
|
||||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="gtk-justify-fill" colspan="2" />
|
||||
<newline/>
|
||||
<group colspan="4" col="4">
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize" colspan="2" />
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
|
@ -1455,15 +1522,24 @@
|
|||
icon="gtk-convert" context="{'scrap': True}"
|
||||
states="draft,waiting,confirmed,assigned" />
|
||||
<field name="prodlot_id" groups="base.group_extended"/>
|
||||
<button name="%(track_line)d" string="Split" type="action"
|
||||
icon="gtk-justify-fill" attrs="{'invisible': [('prodlot_id','<>',False)]}"
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('prodlot_id','<>',False)]}"
|
||||
states="assigned,confirmed,done"
|
||||
context="{'default_use_exist': picking_id.type=='in'}"
|
||||
groups="base.group_extended"/>
|
||||
<field name="tracking_id" groups="base.group_extended"/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<button name="setlast_tracking" string="Set Last Tracking" type="object"
|
||||
attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
icon="terp-stock_effects-object-colorize"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="backorder_id" groups="base.group_extended"/>
|
||||
<field name="state"/>
|
||||
<button name="%(action_partial_move)d" string="Partial" type="action" states="assigned" icon="gtk-justify-fill"/>
|
||||
<button name="action_done" states="assigned" string="Done" type="object" icon="gtk-jump-to"/>
|
||||
<button name="action_done" states="confirmed,assigned" string="Done" type="object" icon="gtk-jump-to"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -1493,18 +1569,23 @@
|
|||
<field name="priority"/>
|
||||
<field name="address_id" context="{'contact_display':'partner'}"/>
|
||||
<newline/>
|
||||
<field name="picking_id"/>
|
||||
<newline/>
|
||||
<field name="prodlot_id" groups="base.group_extended"
|
||||
context="{'location_id':location_id, 'product_id':product_id}"
|
||||
domain="[('product_id','=?',product_id)]"
|
||||
on_change="onchange_lot_id(prodlot_id,product_qty, location_id, product_id)"/>
|
||||
<field name="tracking_id"/>
|
||||
<field groups="base.group_extended" name="tracking_id"/>
|
||||
|
||||
<newline/>
|
||||
<field name="picking_id"/>
|
||||
<group col="2" colspan="2">
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="gtk-justify-fill"/>
|
||||
</group>
|
||||
<label/>
|
||||
<button name="%(split_into)d" string="Split Stock Moves" type="action"
|
||||
icon="terp-stock_effects-object-colorize" attrs="{'invisible': [('tracking_id','<>',False)]}"
|
||||
states="draft,assigned,confirmed,done"/>
|
||||
<label/>
|
||||
<button name="%(track_line)d" string="Split in production lots" type="action" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
<separator colspan="4" string="Move State"/>
|
||||
<field name="state"/>
|
||||
<group col="5" colspan="2">
|
||||
|
@ -1549,6 +1630,10 @@
|
|||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_planned'}" />
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Extended options..." groups="base.group_extended">
|
||||
<field name="tracking_id" context="{'tracking': self}" domain="[]" />
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -1792,5 +1877,52 @@
|
|||
|
||||
<menuitem action="action_reception_picking_move" id="menu_action_pdct_in" parent="menu_stock_products_moves" sequence="1"/>
|
||||
<menuitem action="action_out_picking_move" id="menu_action_pdct_out" parent="menu_stock_products_moves" sequence="2"/>
|
||||
|
||||
|
||||
<record id="view_stock_journal_filter" model="ir.ui.view">
|
||||
<field name="name">stock.journal.filter</field>
|
||||
<field name="model">stock.journal</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Stock Journal">
|
||||
<field name="name"/>
|
||||
<field name="user_id"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_stock_journal_tree">
|
||||
<field name="name">Stock Journals</field>
|
||||
<field name="model">stock.journal</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Stock Journal">
|
||||
<field name="name"/>
|
||||
<field name="user_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_stock_journal_form">
|
||||
<field name="name">Stock Journals</field>
|
||||
<field name="model">stock.journal</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Stock Journal">
|
||||
<field name="name"/>
|
||||
<field name="user_id"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_stock_journal_form" model="ir.actions.act_window">
|
||||
<field name="name">Stock Journals</field>
|
||||
<field name="res_model">stock.journal</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_type">form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
action="action_stock_journal_form"
|
||||
id="menu_action_stock_journal_form"
|
||||
groups="base.group_extended"
|
||||
parent="menu_stock_configuration" />
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
import stock_traceability
|
||||
import stock_move
|
||||
import stock_splitinto
|
||||
import stock_partial_picking
|
||||
import stock_partial_move
|
||||
import stock_replacement
|
||||
|
|
|
@ -179,6 +179,8 @@ class split_in_production_lot(osv.osv_memory):
|
|||
move = self.pool.get('stock.move').browse(cr, uid, context['active_id'], context=context)
|
||||
if 'product_id' in fields:
|
||||
res.update({'product_id': move.product_id.id})
|
||||
if 'product_uom' in fields:
|
||||
res.update({'product_uom': move.product_uom.id})
|
||||
if 'qty' in fields:
|
||||
res.update({'qty': move.product_qty})
|
||||
return res
|
||||
|
@ -186,6 +188,7 @@ class split_in_production_lot(osv.osv_memory):
|
|||
_columns = {
|
||||
'qty': fields.integer('Quantity'),
|
||||
'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
|
||||
'product_uom': fields.many2one('product.uom', 'Product UOM'),
|
||||
'line_ids': fields.one2many('stock.move.split.lines', 'lot_id', 'Lots Number'),
|
||||
'line_exist_ids': fields.one2many('stock.move.split.lines.exist', 'lot_id', 'Lots Existing Numbers'),
|
||||
'use_exist' : fields.boolean('Use Exist'),
|
||||
|
@ -240,15 +243,10 @@ class split_in_production_lot(osv.osv_memory):
|
|||
default_val = {
|
||||
'product_qty': quantity,
|
||||
'product_uos_qty': uos_qty,
|
||||
'state': 'draft'
|
||||
'state': move.state
|
||||
}
|
||||
if quantity_rest > 0:
|
||||
current_move = move_obj.copy(cr, uid, move.id, default_val)
|
||||
move_obj.action_confirm(cr, uid, [current_move])
|
||||
if move.state=='assigned':
|
||||
move_obj.force_assign(cr, uid, [current_move])
|
||||
elif move.state<>'confirmed':
|
||||
move_obj.write(cr, uid, [current_move], {'state': move.state})
|
||||
new_move.append(current_move)
|
||||
if quantity_rest == 0:
|
||||
current_move = move.id
|
||||
|
@ -262,7 +260,7 @@ class split_in_production_lot(osv.osv_memory):
|
|||
prodlot_id = prodlot_obj.create(cr, uid, {'name': line.name},
|
||||
# 'prefix' : line.name},
|
||||
{'product_id': move.product_id.id})
|
||||
move_obj.write(cr, uid, [current_move], {'prodlot_id': prodlot_id})
|
||||
move_obj.write(cr, uid, [current_move], {'prodlot_id': prodlot_id, 'state':move.state})
|
||||
prodlot = prodlot_obj.browse(cr, uid, prodlot_id)
|
||||
# ref = '%d' % (move.id)
|
||||
# if prodlot.ref:
|
||||
|
@ -273,6 +271,7 @@ class split_in_production_lot(osv.osv_memory):
|
|||
if quantity_rest > 0:
|
||||
update_val['product_qty'] = quantity_rest
|
||||
update_val['product_uos_qty'] = uos_qty_rest
|
||||
update_val['state'] = move.state
|
||||
move_obj.write(cr, uid, [move.id], update_val)
|
||||
return new_move
|
||||
split_in_production_lot()
|
||||
|
|
|
@ -103,11 +103,21 @@
|
|||
<field name="model">stock.move.split</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Split in lots">
|
||||
<field name="product_id" colspan="4" readonly="1"/>
|
||||
<newline/>
|
||||
<field name="use_exist"/>
|
||||
<field name="qty" readonly="1"/>
|
||||
<form string="Split in lots">
|
||||
<field name="product_id" colspan="4" readonly="1"/>
|
||||
<newline/>
|
||||
<group colspan="4" col="4">
|
||||
<group colspan="1" col="2">
|
||||
<field name="use_exist"/>
|
||||
</group>
|
||||
<group colspan="1" col="2">
|
||||
<field name="qty" readonly="1"/>
|
||||
</group>
|
||||
<group colspan="1" col="2">
|
||||
<field name="product_uom" readonly="1"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<group colspan="4" attrs="{'invisible':[('use_exist','=',True)]}">
|
||||
<field name="line_ids" colspan="4" nolabel="1">
|
||||
<tree string="Lots Number" editable="top">
|
||||
|
|
|
@ -27,19 +27,22 @@ import pooler
|
|||
import time
|
||||
|
||||
class stock_partial_move(osv.osv_memory):
|
||||
_name = "stock.partial.move"
|
||||
_description = "Partial Move"
|
||||
_name = "stock.partial.move"
|
||||
_description = "Partial Move"
|
||||
_columns = {
|
||||
'date': fields.datetime('Date', required=True),
|
||||
'partner_id': fields.many2one('res.partner',string="Partner"),
|
||||
'type': fields.char("Type", size=3),
|
||||
'address_id': fields.many2one('res.partner.address', 'Delivery Address', help="Address where goods are to be delivered"),
|
||||
}
|
||||
|
||||
def view_init(self, cr, uid, fields_list, context=None):
|
||||
res = super(stock_partial_move, self).view_init(cr, uid, fields_list, context=context)
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_obj = self.pool.get('stock.move')
|
||||
if not context:
|
||||
context={}
|
||||
moveids = []
|
||||
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
|
||||
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
|
||||
if m.state in ('done', 'cancel'):
|
||||
continue
|
||||
if 'move%s_product_id'%(m.id) not in self._columns:
|
||||
|
@ -54,53 +57,58 @@ class stock_partial_move(osv.osv_memory):
|
|||
self._columns['move%s_product_price'%(m.id)] = fields.float("Price")
|
||||
if 'move%s_product_currency'%(m.id) not in self._columns:
|
||||
self._columns['move%s_product_currency'%(m.id)] = fields.many2one('res.currency',string="Currency")
|
||||
return res
|
||||
return res
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False,submenu=False):
|
||||
result = super(stock_partial_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
|
||||
result = super(stock_partial_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar,submenu)
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_ids = context.get('active_ids', False)
|
||||
move_ids = context.get('active_ids', False)
|
||||
move_ids = move_obj.search(cr, uid, [('id','in',move_ids)])
|
||||
_moves_arch_lst = """<form string="Deliver Products">
|
||||
<separator colspan="4" string="Delivery Information"/>
|
||||
<field name="date" colspan="4" />
|
||||
<group colspan="4" attrs="{'invisible':[('type','=','in')]}">
|
||||
<field name="partner_id" attrs="{'required':[('type','!=','in')]}" />
|
||||
<field name="address_id" attrs="{'required':[('type','!=','in')]}"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<newline/>
|
||||
</group>
|
||||
<separator colspan="4" string="Move Detail"/>
|
||||
"""
|
||||
"""
|
||||
_moves_fields = result['fields']
|
||||
if move_ids and view_type in ['form']:
|
||||
for m in move_obj.browse(cr, uid, move_ids, context):
|
||||
if move_ids and view_type in ['form']:
|
||||
for m in move_obj.browse(cr, uid, move_ids, context):
|
||||
if m.state in ('done', 'cancel'):
|
||||
continue
|
||||
_moves_fields.update({
|
||||
'move%s_product_id'%(m.id) : {
|
||||
'string': _('Product'),
|
||||
'type' : 'many2one',
|
||||
'relation': 'product.product',
|
||||
'required' : True,
|
||||
'readonly' : True,
|
||||
'type' : 'many2one',
|
||||
'relation': 'product.product',
|
||||
'required' : True,
|
||||
'readonly' : True,
|
||||
},
|
||||
'move%s_product_qty'%(m.id) : {
|
||||
'string': _('Quantity'),
|
||||
'type' : 'float',
|
||||
'required': True,
|
||||
'required': True,
|
||||
},
|
||||
'move%s_product_uom'%(m.id) : {
|
||||
'string': _('Product UOM'),
|
||||
'type' : 'many2one',
|
||||
'relation': 'product.uom',
|
||||
'required' : True,
|
||||
'readonly' : True,
|
||||
'type' : 'many2one',
|
||||
'relation': 'product.uom',
|
||||
'required' : True,
|
||||
'readonly' : True,
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
_moves_arch_lst += """
|
||||
<group colspan="4" col="10">
|
||||
<field name="move%s_product_id" nolabel="1"/>
|
||||
<field name="move%s_product_qty" string="Qty" />
|
||||
<field name="move%s_product_uom" nolabel="1" />
|
||||
"""%(m.id, m.id, m.id)
|
||||
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
|
||||
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
|
||||
_moves_fields.update({
|
||||
'move%s_product_price'%(m.id) : {
|
||||
'string': _('Price'),
|
||||
|
@ -108,9 +116,9 @@ class stock_partial_move(osv.osv_memory):
|
|||
},
|
||||
'move%s_product_currency'%(m.id): {
|
||||
'string': _('Currency'),
|
||||
'type' : 'float',
|
||||
'type' : 'many2one',
|
||||
'relation': 'res.currency',
|
||||
'type' : 'float',
|
||||
'type' : 'many2one',
|
||||
'relation': 'res.currency',
|
||||
}
|
||||
})
|
||||
_moves_arch_lst += """
|
||||
|
@ -131,7 +139,7 @@ class stock_partial_move(osv.osv_memory):
|
|||
</group>
|
||||
</form>"""
|
||||
result['arch'] = _moves_arch_lst
|
||||
result['fields'] = _moves_fields
|
||||
result['fields'] = _moves_fields
|
||||
return result
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
|
@ -139,23 +147,40 @@ class stock_partial_move(osv.osv_memory):
|
|||
@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.
|
||||
"""
|
||||
@param fields: List of fields for which we want default values
|
||||
@param context: A standard dictionary
|
||||
@return: A dictionary which of fields with values.
|
||||
"""
|
||||
|
||||
res = super(stock_partial_move, self).default_get(cr, uid, fields, context=context)
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_obj = self.pool.get('stock.move')
|
||||
if not context:
|
||||
context={}
|
||||
moveids = []
|
||||
moveids = address_delivery = address_default = []
|
||||
if 'date' in fields:
|
||||
res.update({'date': time.strftime('%Y-%m-%d %H:%M:%S')})
|
||||
move_ids = context.get('active_ids', [])
|
||||
move_ids = move_obj.search(cr, uid, [('id','in',move_ids)])
|
||||
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
|
||||
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
|
||||
if m.state in ('done', 'cancel'):
|
||||
continue
|
||||
res['type'] = m.picking_id and m.picking_id.type or ''
|
||||
address_ids = list(set([(pick.address_id and pick.address_id.id, pick.address_id and pick.address_id.partner_id and pick.address_id.partner_id.id) for pick in move_obj.browse(cr, uid, move_ids)]))
|
||||
address_ids1 = list(set([(pick.address_id and pick.address_id.id, pick.address_id and pick.address_id.partner_id and pick.address_id.partner_id.id) for pick in move_obj.browse(cr, uid, move_ids) if pick.address_id]))
|
||||
if len(address_ids1) == 1:
|
||||
if m.picking_id and m.picking_id.type=='out':
|
||||
res['address_id'] = address_ids[0][0] or False
|
||||
res['partner_id'] = address_ids[0][1] or False
|
||||
if m.picking_id and m.picking_id.type=='in':
|
||||
res['partner_id'] = m.company_id.partner_id.id or False
|
||||
if m.company_id.partner_id:
|
||||
address_default = [add.id for add in m.company_id.partner_id.address if add.type=='default']
|
||||
address_delivery = [add.id for add in m.company_id.partner_id.address if add.type=='delivery']
|
||||
if len(address_delivery):
|
||||
res['address_id'] = address_delivery and address_delivery[0] or False
|
||||
else:
|
||||
res['address_id'] = address_default and address_default[0] or False
|
||||
|
||||
if 'move%s_product_id'%(m.id) in fields:
|
||||
res['move%s_product_id'%(m.id)] = m.product_id.id
|
||||
if 'move%s_product_qty'%(m.id) in fields:
|
||||
|
@ -171,7 +196,7 @@ class stock_partial_move(osv.osv_memory):
|
|||
currency = False
|
||||
if hasattr(m.picking_id, 'sale_id') and m.picking_id.sale_id:
|
||||
currency = m.picking_id.sale_id.pricelist_id.currency_id.id
|
||||
|
||||
|
||||
if 'move%s_product_price'%(m.id) in fields:
|
||||
res['move%s_product_price'%(m.id)] = price
|
||||
if 'move%s_product_currency'%(m.id) in fields:
|
||||
|
@ -185,37 +210,38 @@ class stock_partial_move(osv.osv_memory):
|
|||
currency = False
|
||||
if hasattr(m.picking_id, 'purchase_id') and m.picking_id.purchase_id:
|
||||
currency = m.picking_id.purchase_id.pricelist_id.currency_id.id
|
||||
|
||||
|
||||
if 'move%s_product_price'%(m.id) in fields:
|
||||
res['move%s_product_price'%(m.id)] = price
|
||||
if 'move%s_product_currency'%(m.id) in fields:
|
||||
res['move%s_product_currency'%(m.id)] = currency
|
||||
print res
|
||||
return res
|
||||
return res
|
||||
|
||||
def do_partial(self, cr, uid, ids, context):
|
||||
""" Makes partial moves and pickings done.
|
||||
@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.
|
||||
"""
|
||||
|
||||
@param fields: List of fields for which we want default values
|
||||
@param context: A standard dictionary
|
||||
@return: A dictionary which of fields with values.
|
||||
"""
|
||||
|
||||
rec_id = context and context.get('active_id', False)
|
||||
tracking_lot = context.get('tracking_lot', False)
|
||||
if tracking_lot:
|
||||
tracking = self.pool.get('stock.tracking')
|
||||
tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
|
||||
context ['tracking_lot'] = tracking_lot
|
||||
move_obj = self.pool.get('stock.move')
|
||||
tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
|
||||
context ['tracking_lot'] = tracking_lot
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_ids = context.get('active_ids', False)
|
||||
partial = self.browse(cr, uid, ids[0], context)
|
||||
partial_datas = {
|
||||
'delivery_date' : partial.date
|
||||
'partner_id' : partial.partner_id and partial.partner_id.id or False,
|
||||
'address_id' : partial.address_id and partial.address_id.id or False,
|
||||
'delivery_date' : partial.date
|
||||
}
|
||||
for m in move_obj.browse(cr, uid, move_ids):
|
||||
for m in move_obj.browse(cr, uid, move_ids):
|
||||
if m.state in ('done', 'cancel'):
|
||||
continue
|
||||
partial_datas['move%s'%(m.id)] = {
|
||||
|
@ -224,15 +250,15 @@ class stock_partial_move(osv.osv_memory):
|
|||
'product_uom' : getattr(partial, 'move%s_product_uom'%(m.id)).id
|
||||
}
|
||||
|
||||
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
|
||||
partial_datas['move%s'%(m.id)].update({
|
||||
if (m.picking_id.type == 'in') and (m.product_id.cost_method == 'average'):
|
||||
partial_datas['move%s'%(m.id)].update({
|
||||
'product_price' : getattr(partial, 'move%s_product_price'%(m.id)),
|
||||
'product_currency': getattr(partial, 'move%s_product_currency'%(m.id)).id
|
||||
})
|
||||
})
|
||||
res = move_obj.do_partial(cr, uid, move_ids, partial_datas, context=context)
|
||||
return {}
|
||||
|
||||
stock_partial_move()
|
||||
|
||||
stock_partial_move()
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue