@@ -2508,8 +2508,6 @@
|
||||
<field domain="[('journal_id','=',parent.journal_id)]" name="account_id"/>
|
||||
<field name="analytic_account_id" groups="base.group_extended" />
|
||||
<field name="amount"/>
|
||||
<field context="{'partner_id': partner_id, 'amount': amount, 'account_id': account_id, 'currency_id': parent.currency, 'journal_id': parent.journal_id, 'date':date}" name="reconcile_id"/>
|
||||
<field invisible="1" name="reconcile_amount"/>
|
||||
</tree>
|
||||
<form string="Statement lines">
|
||||
<field name="date"/>
|
||||
@@ -2519,7 +2517,6 @@
|
||||
<field domain="[('journal_id', '=', parent.journal_id), ('type', '<>', 'view')]" name="account_id"/>
|
||||
<field name="analytic_account_id" groups="base.group_extended" />
|
||||
<field name="amount"/>
|
||||
<field context="{'partner_id':partner_id,'amount':amount,'account_id':account_id,'currency_id': parent.currency,'journal_id':parent.journal_id, 'date':date}" name="reconcile_id"/>
|
||||
<field name="ref"/>
|
||||
<field name="sequence"/>
|
||||
<separator colspan="4" string="Notes"/>
|
||||
|
||||
@@ -2668,10 +2668,10 @@ msgid ""
|
||||
"partners accounts (for debit/credit computations), closed for deprecated "
|
||||
"accounts."
|
||||
msgstr ""
|
||||
"Pogled: Sintetički zbrojni konto, ne sadrži knjiženja\r\n"
|
||||
"Konsolidacija: Zbrojni konto za više poduzeća i paralelne kontne planove\r\n"
|
||||
"Obveze: Salda konta partnera - dobavljači\r\n"
|
||||
"Potraživanja: Salda konta partnera - kupci\r\n"
|
||||
"Pogled: Sintetički zbrojni konto, ne sadrži knjiženja\n"
|
||||
"Konsolidacija: Zbrojni konto za više poduzeća i paralelne kontne planove\n"
|
||||
"Obveze: Salda konta partnera - dobavljači\n"
|
||||
"Potraživanja: Salda konta partnera - kupci\n"
|
||||
"Zatvoren: Za konta koja se više ne koriste"
|
||||
|
||||
#. module: account
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
<record id="demo_message1" model="notify.message">
|
||||
<field name="name">OpenERP SA</field>
|
||||
<field name="msg">ERP & CRM Solutions....</field>
|
||||
<field name="msg">ERP & CRM Solutions....</field>
|
||||
</record>
|
||||
<record id="demo_message1" model="notify.message">
|
||||
<field name="name">Tiny sprl</field>
|
||||
<field name="msg">Be Expert with the Experts...</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
||||
@@ -388,8 +388,9 @@
|
||||
string="Sold" help="Buy object"
|
||||
domain="[('state','=','sold')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" string="Object Name"/>
|
||||
<field name="lot_type"/>
|
||||
<field name="name"/>
|
||||
<field name="ach_uid"/>
|
||||
<field name="bord_vnd_id"/>
|
||||
<field name="state"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="16">
|
||||
|
||||
@@ -398,10 +398,13 @@ property or property parameter."),
|
||||
"""
|
||||
res = None
|
||||
def ics_datetime(idate, short=False):
|
||||
if short:
|
||||
return date.fromtimestamp(time.mktime(time.strptime(idate, '%Y-%m-%d')))
|
||||
if idate:
|
||||
if short:
|
||||
return date.fromtimestamp(time.mktime(time.strptime(idate, '%Y-%m-%d')))
|
||||
else:
|
||||
return datetime.strptime(idate, '%Y-%m-%d %H:%M:%S')
|
||||
else:
|
||||
return datetime.strptime(idate, '%Y-%m-%d %H:%M:%S')
|
||||
return False
|
||||
try:
|
||||
# FIXME: why isn't this in CalDAV?
|
||||
import vobject
|
||||
@@ -482,35 +485,37 @@ property or property parameter."),
|
||||
sign = att.sent_by_uid and att.sent_by_uid.signature or ''
|
||||
sign = '<br>'.join(sign and sign.split('\n') or [])
|
||||
res_obj = att.ref
|
||||
sub = res_obj.name
|
||||
att_infos = []
|
||||
other_invitaion_ids = self.search(cr, uid, [('ref', '=', res_obj._name + ',' + str(res_obj.id))])
|
||||
for att2 in self.browse(cr, uid, other_invitaion_ids):
|
||||
att_infos.append(((att2.user_id and att2.user_id.name) or \
|
||||
(att2.partner_id and att2.partner_id.name) or \
|
||||
att2.email) + ' - Status: ' + att2.state.title())
|
||||
body_vals = {'name': res_obj.name,
|
||||
'start_date': res_obj.date,
|
||||
'end_date': res_obj.date_deadline or False,
|
||||
'description': res_obj.description or '-',
|
||||
'location': res_obj.location or '-',
|
||||
'attendees': '<br>'.join(att_infos),
|
||||
'user': res_obj.user_id and res_obj.user_id.name or 'OpenERP User',
|
||||
'sign': sign,
|
||||
'company': company
|
||||
}
|
||||
body = html_invitation % body_vals
|
||||
if mail_to and email_from:
|
||||
attach = self.get_ics_file(cr, uid, res_obj, context=context)
|
||||
tools.email_send(
|
||||
email_from,
|
||||
mail_to,
|
||||
sub,
|
||||
body,
|
||||
attach=attach and [('invitation.ics', attach)] or None,
|
||||
subtype='html',
|
||||
reply_to=email_from
|
||||
)
|
||||
if res_obj:
|
||||
att_infos = []
|
||||
sub = res_obj.name
|
||||
other_invitation_ids = self.search(cr, uid, [('ref', '=', res_obj._name + ',' + str(res_obj.id))])
|
||||
|
||||
for att2 in self.browse(cr, uid, other_invitation_ids):
|
||||
att_infos.append(((att2.user_id and att2.user_id.name) or \
|
||||
(att2.partner_id and att2.partner_id.name) or \
|
||||
att2.email) + ' - Status: ' + att2.state.title())
|
||||
body_vals = {'name': res_obj.name,
|
||||
'start_date': res_obj.date,
|
||||
'end_date': res_obj.date_deadline or False,
|
||||
'description': res_obj.description or '-',
|
||||
'location': res_obj.location or '-',
|
||||
'attendees': '<br>'.join(att_infos),
|
||||
'user': res_obj.user_id and res_obj.user_id.name or 'OpenERP User',
|
||||
'sign': sign,
|
||||
'company': company
|
||||
}
|
||||
body = html_invitation % body_vals
|
||||
if mail_to and email_from:
|
||||
attach = self.get_ics_file(cr, uid, res_obj, context=context)
|
||||
tools.email_send(
|
||||
email_from,
|
||||
mail_to,
|
||||
sub,
|
||||
body,
|
||||
attach=attach and [('invitation.ics', attach)] or None,
|
||||
subtype='html',
|
||||
reply_to=email_from
|
||||
)
|
||||
return True
|
||||
|
||||
def onchange_user_id(self, cr, uid, ids, user_id, *args, **argv):
|
||||
|
||||
@@ -128,8 +128,9 @@ send an Email to Invited Person')
|
||||
att = att_obj.browse(cr, uid, context_id)
|
||||
att_val.update({
|
||||
'parent_ids': [(4, att.id)],
|
||||
'ref': att.ref._name + ',' +str(att.ref.id)
|
||||
'ref': att.ref and (att.ref._name + ',' +str(att.ref.id)) or False
|
||||
})
|
||||
|
||||
attendees.append(att_obj.create(cr, uid, att_val))
|
||||
if model_field:
|
||||
for attendee in attendees:
|
||||
|
||||
@@ -54,9 +54,8 @@ class quality_test(base_module_quality.abstract_quality_check):
|
||||
flag = True
|
||||
file_path = os.path.join(module_path, file_py)
|
||||
try:
|
||||
import pylint
|
||||
res = os.popen('pylint --rcfile=' + config_file_path + ' ' + file_path).read()
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
self.error = True
|
||||
self.log.exception("Cannot run pylint test for %s", file_path)
|
||||
self.result += _("Error. Is pylint correctly installed? (http://pypi.python.org/pypi/pylint)")+"\n"
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#
|
||||
##############################################################################
|
||||
from osv import fields, osv
|
||||
import netsvc
|
||||
|
||||
class base_setup_installer(osv.osv_memory):
|
||||
_name = 'base.setup.installer'
|
||||
|
||||
@@ -83,12 +83,12 @@ class report_custom(report_int):
|
||||
if benefit < minbenef:
|
||||
minbenef = benefit
|
||||
|
||||
tuple = (proba * 100, benefit)
|
||||
tuple_benefit = (proba * 100, benefit)
|
||||
responsible_data.setdefault(userid, [])
|
||||
responsible_data[userid].append(tuple)
|
||||
responsible_data[userid].append(tuple_benefit)
|
||||
|
||||
tuple = (proba * 100, cost, benefit)
|
||||
data.append(tuple)
|
||||
tuple_benefit = (proba * 100, cost, benefit)
|
||||
data.append(tuple_benefit)
|
||||
|
||||
responsible_names[userid] = (row['name'] or '/').replace('/','//')
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
|
||||
from osv import fields,osv
|
||||
import time
|
||||
import tools
|
||||
|
||||
class report_document_user(osv.osv):
|
||||
|
||||
@@ -65,12 +65,14 @@
|
||||
<record id="employee2" model="hr.employee">
|
||||
<field name="name">Quentin Paolino</field>
|
||||
<field name="calendar_id" ref="resource.timesheet_group1"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="category_ids" eval="[(6, 0, [ref('category_jr_exec'),ref('category_managers')])]"/>
|
||||
</record>
|
||||
|
||||
<record id="employee3" model="hr.employee">
|
||||
<field name="name">Antoine Philippe</field>
|
||||
<field name="calendar_id" ref="resource.timesheet_group1"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="category_ids" eval="[(6, 0, [ref('category_trainee')])]"/>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -220,8 +220,8 @@ msgid ""
|
||||
"managers can obtain an easy view on best ideas from all the users. Once "
|
||||
"installed, check the menu 'Ideas' in the 'Tools' main menu."
|
||||
msgstr ""
|
||||
"这模块允许你在企业创新里简单和有效地使用.\r\n"
|
||||
"它允许每个人对不同注意表达构想, 其它用户能评价这些构想和对具体的构想进行投票. 每个构想根据不同投票决定得分.\r\n"
|
||||
"这模块允许你在企业创新里简单和有效地使用.\n"
|
||||
"它允许每个人对不同注意表达构想, 其它用户能评价这些构想和对具体的构想进行投票. 每个构想根据不同投票决定得分.\n"
|
||||
"管理人员可以很容易得到所有用户对构想的评价."
|
||||
|
||||
#. module: idea
|
||||
|
||||
@@ -136,8 +136,8 @@ class mailgate_thread(osv.osv):
|
||||
'partner_id': partner_id,
|
||||
'res_id': case.id,
|
||||
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||
'message_id': message_id,
|
||||
'description': details or (hasattr(case, 'description') and case.description or False),
|
||||
'message_id': message_id,
|
||||
'description': details or (hasattr(case, 'description') and case.description or False),
|
||||
'attachment_ids': [(6, 0, attachments)]
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ class mailgate_tool(osv.osv_memory):
|
||||
'description': msg.get('body', msg.get('from')),
|
||||
'history': True,
|
||||
'partner_id': partner_id,
|
||||
'res_model': model,
|
||||
'model': model,
|
||||
'email_cc': msg.get('cc'),
|
||||
'email_from': msg.get('from'),
|
||||
'email_to': msg.get('to'),
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
<group colspan="4" col="6">
|
||||
<field name="name" string="Subject" required="1" select="1" widget="char" size="512"/>
|
||||
<field name="date" required="1" select="1"/>
|
||||
<field name="user_id" string="Responsible" select="1"/>
|
||||
<field name="user_id" string="Owner" select="1"/>
|
||||
<field name="partner_id" readonly="1" />
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Details">
|
||||
<group col="2" colspan="2">
|
||||
<separator string="Email Details" colspan="4"/>
|
||||
<separator string="Email Followers" colspan="4"/>
|
||||
<field name="email_from" />
|
||||
<field name="email_to" widget="char" size="512"/>
|
||||
<field name="email_cc" widget="char" size="512"/>
|
||||
@@ -50,7 +50,9 @@
|
||||
<field name="date" />
|
||||
<field name="name" string="Subject"/>
|
||||
<field name="email_from" string="From"/>
|
||||
<field name="user_id" string="Responsible"/>
|
||||
<field name="user_id" string="Owner"/>
|
||||
<field name="message_id" string="Message" invisible="1"/>
|
||||
<field name="partner_id" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -63,13 +65,21 @@
|
||||
<search string="Email Search">
|
||||
<field name="name" string="Subject"/>
|
||||
<field name="date" />
|
||||
<field name="user_id" />
|
||||
<field name="message_id" />
|
||||
<field name="user_id" string="Owner" default="uid"/>
|
||||
<field name="description" />
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." groups="base.group_extended">
|
||||
<filter string="Partner" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Owner" name="User" icon="terp-personal" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Thread" icon="terp-mail-" domain="[]" context="{'group_by':'message_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'date'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="view_mailgate_thread_form">
|
||||
<field name="name">mailgate.thread.form</field>
|
||||
<field name="model">mailgate.thread</field>
|
||||
@@ -127,8 +137,9 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="domain">[('history', '=', True)]</field>
|
||||
<field name="view_id" ref="view_mailgate_message_tree"/>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.actions.act_window" id="action_view_mailgate_thread">
|
||||
<field name="name">Mailgateway Threads</field>
|
||||
<field name="res_model">mailgate.thread</field>
|
||||
@@ -149,7 +160,7 @@
|
||||
<field name="view_id" ref="view_mailgate_thread_form"/>
|
||||
<field name="act_window_id" ref="action_view_mailgate_thread"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Emailsaction-->
|
||||
<record model="ir.actions.act_window" id="action_view_mailgate_message">
|
||||
<field name="name">Emails</field>
|
||||
@@ -159,7 +170,7 @@
|
||||
<field name="domain">[('history', '=', True)]</field>
|
||||
<field name="view_id" ref="view_mailgate_message_tree"/>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_view_mailgate_thread_view1">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
@@ -173,10 +184,6 @@
|
||||
<field name="act_window_id" ref="action_view_mailgate_thread"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="base.menu_base_config_mail" name="Mail" parent="base.menu_base_config" sequence="4"/>
|
||||
<menuitem id="menu_mailgate_message" name="Emails" action="action_view_mailgate_message"
|
||||
parent="base.menu_base_config_mail" sequence="5" groups="base.group_system"/>
|
||||
|
||||
<act_window domain="[('partner_id', '=', active_id), ('history', '=', True)]"
|
||||
id="act_res_partner_emails" name="Emails"
|
||||
res_model="mailgate.message"
|
||||
@@ -184,5 +191,16 @@
|
||||
view_id="view_mailgate_message_tree"
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<menuitem name="Emails" id="menu_base_config_mail"
|
||||
parent="base.menu_base_partner" sequence="5" />
|
||||
|
||||
<menuitem name="Emails" id="menu_mailgate_message"
|
||||
parent="menu_base_config_mail"
|
||||
action="mail_gateway.action_view_mailgate_message"
|
||||
/>
|
||||
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
+22
-22
@@ -19,11 +19,11 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx import DateTime
|
||||
from datetime import datetime, timedelta
|
||||
from itertools import groupby
|
||||
from operator import itemgetter
|
||||
from datetime import datetime
|
||||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
import ir
|
||||
import netsvc
|
||||
import time
|
||||
|
||||
@@ -178,8 +178,8 @@ class mrp_bom(osv.osv):
|
||||
'code': fields.char('Reference', size=16),
|
||||
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the bills of material without removing it."),
|
||||
'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', required=True,
|
||||
help= "If a sub-product is used in several products, it can be useful to create its own BoM."\
|
||||
"Though if you don't want separated production orders for this sub-product, select Set/Phantom as BoM type."\
|
||||
help= "If a sub-product is used in several products, it can be useful to create its own BoM. "\
|
||||
"Though if you don't want separated production orders for this sub-product, select Set/Phantom as BoM type. "\
|
||||
"If a Phantom BoM is used for a root product, it will be sold and shipped as a set of components, instead of being produced."),
|
||||
'method': fields.function(_compute_type, string='Method', method=True, type='selection', selection=[('',''),('stock','On Stock'),('order','On Order'),('set','Set / Pack')]),
|
||||
'date_start': fields.date('Valid From', help="Validity of this BoM or component. Keep empty if it's always valid."),
|
||||
@@ -250,7 +250,6 @@ class mrp_bom(osv.osv):
|
||||
@param properties: List of related properties.
|
||||
@return: False or BoM id.
|
||||
"""
|
||||
bom_result = False
|
||||
cr.execute('select id from mrp_bom where product_id=%s and bom_id is null order by sequence', (product_id,))
|
||||
ids = map(lambda x: x[0], cr.fetchall())
|
||||
max_prop = 0
|
||||
@@ -356,14 +355,16 @@ class many2many_domain(fields.many2many):
|
||||
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
|
||||
if not context:
|
||||
context = {}
|
||||
res = {}
|
||||
|
||||
move_obj = obj.pool.get('stock.move')
|
||||
for prod in obj.browse(cr, user, ids, context=context):
|
||||
cr.execute("SELECT move_id from mrp_production_move_ids where\
|
||||
production_id=%s" % (prod.id))
|
||||
m_ids = map(lambda x: x[0], cr.fetchall())
|
||||
final = move_obj.search(cr, user, self._domain + [('id', 'in', tuple(m_ids))])
|
||||
res[prod.id] = final
|
||||
res = {}.fromkeys(ids, [])
|
||||
valid_move_ids = move_obj.search(cr, user, self._domain) # move ids relative to domain argument
|
||||
cr.execute("SELECT production_id, move_id from mrp_production_move_ids where production_id in %s and move_id in %s",
|
||||
[tuple(ids), tuple(valid_move_ids)])
|
||||
related_move_map = cr.fetchall()
|
||||
related_move_dict = dict((k, list(set([v[1] for v in itr]))) for k, itr in groupby(related_move_map, itemgetter(0)))
|
||||
res.update(related_move_dict)
|
||||
|
||||
return res
|
||||
|
||||
class one2many_domain(fields.one2many):
|
||||
@@ -374,13 +375,14 @@ class one2many_domain(fields.one2many):
|
||||
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
|
||||
if not context:
|
||||
context = {}
|
||||
res = {}
|
||||
|
||||
move_obj = obj.pool.get('stock.move')
|
||||
for prod in obj.browse(cr, user, ids, context=context):
|
||||
cr.execute("SELECT id from stock_move where production_id=%s" % (prod.id))
|
||||
m_ids = map(lambda x: x[0], cr.fetchall())
|
||||
final = move_obj.search(cr, user, self._domain + [('id', 'in', tuple(m_ids))])
|
||||
res[prod.id] = final
|
||||
res = {}.fromkeys(ids, [])
|
||||
key = operator.itemgetter(0)
|
||||
move_ids = move_obj.search(cr, user, self._domain+[('production_id', 'in', tuple(ids))], context=context)
|
||||
related_move_dict = dict([(o.production_id.id, [o.id]) for o in move_obj.browse(cr, user, move_ids, context=context)])
|
||||
res.update(related_move_dict)
|
||||
|
||||
return res
|
||||
|
||||
class mrp_production(osv.osv):
|
||||
@@ -479,7 +481,7 @@ class mrp_production(osv.osv):
|
||||
'name': lambda x, y, z, c: x.pool.get('ir.sequence').get(y, z, 'mrp.production') or '/',
|
||||
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.production', context=c),
|
||||
}
|
||||
_order = 'date_planned asc, priority desc';
|
||||
_order = 'priority desc, date_planned asc';
|
||||
|
||||
def _check_qty(self, cr, uid, ids):
|
||||
orders = self.browse(cr, uid, ids)
|
||||
@@ -681,7 +683,6 @@ class mrp_production(osv.osv):
|
||||
stock_mov_obj = self.pool.get('stock.move')
|
||||
production = self.browse(cr, uid, production_id)
|
||||
|
||||
raw_product_todo = []
|
||||
final_product_todo = []
|
||||
|
||||
produced_qty = 0
|
||||
@@ -800,7 +801,6 @@ class mrp_production(osv.osv):
|
||||
""" Changes state to In Production and writes starting date.
|
||||
@return: True
|
||||
"""
|
||||
move_ids = []
|
||||
self.write(cr, uid, ids, {'state': 'in_production', 'date_start': time.strftime('%Y-%m-%d %H:%M:%S')})
|
||||
return True
|
||||
|
||||
|
||||
+47
-31
@@ -33,7 +33,7 @@
|
||||
</field>
|
||||
</record>
|
||||
<record id="mrp_property_group_action" model="ir.actions.act_window">
|
||||
<field name="name">Property Categories</field>
|
||||
<field name="name">Property Groups</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">mrp.property.group</field>
|
||||
<field name="view_type">form</field>
|
||||
@@ -64,7 +64,6 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Properties">
|
||||
<separator colspan="4" string="General Information"/>
|
||||
<field colspan="4" name="name" select="1"/>
|
||||
<field name="group_id" select="1"/>
|
||||
<field name="composition" select="1"/>
|
||||
@@ -82,8 +81,8 @@
|
||||
<search string="Search">
|
||||
<group col='15' colspan='4'>
|
||||
<field name="name"/>
|
||||
<field name="group_id" widget="selection" />
|
||||
<field name="composition"/>
|
||||
<field name="group_id" widget="selection" />
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="20">
|
||||
@@ -132,7 +131,7 @@
|
||||
<field name="name"/>
|
||||
<field name="resource_id"/>
|
||||
<field name="resource_type"/>
|
||||
<field name="company_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -192,9 +191,11 @@
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended">
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'resource_type'}"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}"/>
|
||||
<filter string="Resource" icon="terp-personal" domain="[]" context="{'group_by':'resource_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'resource_type'}"/>
|
||||
<separator orientation="vertical" groups="base.group_multi_company"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -252,15 +253,18 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Routing">
|
||||
<separator colspan="4" string="General Information"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="active" select="1" groups="base.group_extended"/>
|
||||
<field name="code" select="1"/>
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="location_id"/>
|
||||
<separator colspan="4" string="Description"/>
|
||||
<field colspan="4" name="note" nolabel="1"/>
|
||||
<separator colspan="4" string="Work Center Operations"/>
|
||||
<field colspan="4" name="workcenter_lines" nolabel="1" widget="one2many_list"/>
|
||||
<field name="active" groups="base.group_extended"/>
|
||||
<notebook colspan="4">
|
||||
<page string="Work Center Operations">
|
||||
<field colspan="4" name="workcenter_lines" nolabel="1" widget="one2many_list"/>
|
||||
</page>
|
||||
<page string="Notes">
|
||||
<field colspan="4" name="note" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -276,12 +280,25 @@
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="mrp_routing_search_view" model="ir.ui.view">
|
||||
<field name="name">mrp.routing.search</field>
|
||||
<field name="model">mrp.routing</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Routing">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="location_id"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="mrp_routing_action" model="ir.actions.act_window">
|
||||
<field name="name">Routings</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">mrp.routing</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="mrp_routing_tree_view"/>
|
||||
<field name="search_view_id" ref="mrp_routing_search_view"/>
|
||||
<field name="help">Routings define the assembly operations to be done in work centers for manufacturing a certain product. They are usually attached to bills of materials which will define the assembly of products required for manufacture or for finished products.</field>
|
||||
</record>
|
||||
<menuitem action="mrp_workcenter_action" id="menu_mrp_workcenter_action" parent="mrp.menu_mrp_property" groups="base.group_extended" sequence="40" />
|
||||
@@ -358,16 +375,14 @@
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By" colspan="4" col="8" groups="base.group_extended">
|
||||
<group expand="0" string="Group By..." colspan="4" col="8" groups="base.group_extended">
|
||||
<filter string="Product" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string='Default UOM' icon="terp-mrp" domain="[]" context="{'group_by' : 'product_uom'}" />
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}"/>
|
||||
<filter string='Type' icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}" />
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}"/>
|
||||
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_start'}" help="Starting Date"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -497,10 +512,10 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="blue:state in ('draft','confirmed');red:date_planned<current_date and state not in ('done','cancel');black:date_planned>=current_date;gray:state in ('done','cancel') " string="Manufacturing Orders">
|
||||
<field name="name"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="product_id"/>
|
||||
<field name="product_qty" sum="Total Qty"/>
|
||||
<field name="product_uom"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="routing_id" groups="base.group_extended"/>
|
||||
<field name="hour_total" sum="Total Hours" groups="base.group_extended"/>
|
||||
<field name="cycle_total" sum="Total Cycles" groups="base.group_extended"/>
|
||||
@@ -625,16 +640,16 @@
|
||||
states="done,cancel"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
<separator colspan="4"/>
|
||||
<group col="9" colspan="4">
|
||||
<field name="state"/>
|
||||
<button name="action_compute" states="draft" string="Compute Data" type="object" icon="gtk-execute"/>
|
||||
<button name="action_compute" states="draft" string="Compute Data" type="object" icon="terp-stock_format-scientific"/>
|
||||
<button name="button_confirm" states="draft" string="Confirm Production" icon="gtk-apply"/>
|
||||
<button name="button_produce" states="ready" string="Start Production" icon="gtk-execute"/>
|
||||
<button name="button_produce" states="ready" string="Start Production" icon="terp-gtk-jump-to-ltr"/>
|
||||
<button name="%(act_mrp_product_produce)d" states="in_production" string="Produce" icon="gtk-ok" type="action"/>
|
||||
<button name="force_production" states="confirmed,picking_except" string="Force Reservation" type="object" icon="gtk-jump-to"/>
|
||||
<button name="button_cancel" states="draft,ready,confirmed,in_production,picking_except" string="Cancel" icon="gtk-cancel"/>
|
||||
<button name="button_recreate" states="picking_except" string="Recreate Picking" icon="gtk-convert"/>
|
||||
<button name="button_cancel" states="draft,ready,confirmed,in_production,picking_except" string="Cancel" icon="gtk-stop"/>
|
||||
<button name="button_recreate" states="picking_except" string="Recreate Picking" icon="terp-document-new"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Finished Products">
|
||||
@@ -736,12 +751,13 @@
|
||||
<field name="origin"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By" colspan="10" col="8">
|
||||
<group expand="0" string="Group By..." colspan="10" col="8">
|
||||
<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="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}" groups="base.group_extended"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_planned'}"/>
|
||||
<filter string="Routing" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'routing_id'}" groups="base.group_extended"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_planned'}" help="Scheduled Date"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -761,12 +777,12 @@
|
||||
</record>
|
||||
<menuitem action="mrp_production_action" id="menu_mrp_production_action" parent="menu_mrp_manufacturing" groups="base.group_system,mrp.group_mrp_user,mrp.group_mrp_manager" sequence="1"/>
|
||||
|
||||
<record id="mrp_production_action2_gantt" model="ir.actions.act_window">
|
||||
<record id="mrp_production_action_planning" model="ir.actions.act_window">
|
||||
<field name="name">Manufacturing Orders Planning</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">mrp.production</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">gantt,tree,form,calendar,graph</field>
|
||||
<field name="view_mode">tree,form,calendar,graph</field>
|
||||
<field name="domain">[('state','in',('ready','confirmed','in_production'))]</field>
|
||||
<field name="help">Manufacturing Orders describe the operations that need to be carried out and the raw materials usage for each stage of production. You use specifications (bills of materials or BoM) to work out the raw material requirements and the manufacturing orders needed for the finished products. Once the bills of materials have been defined, OpenERP becomes capable of automatically deciding on the manufacturing route depending on the needs of the company.</field>
|
||||
</record>
|
||||
|
||||
@@ -40,6 +40,7 @@ class bom_structure(report_sxw.rml_parse):
|
||||
res = {}
|
||||
res['name'] = l.name
|
||||
res['pname'] = l.product_id.name
|
||||
res['pcode'] = l.product_id.default_code
|
||||
res['pqty'] = l.product_qty
|
||||
res['uname'] = l.product_uom.name
|
||||
res['code'] = l.code
|
||||
|
||||
@@ -67,7 +67,9 @@
|
||||
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.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_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Bold_Centre_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" 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_Bold_Right_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="terp_default_8_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
@@ -82,7 +84,7 @@
|
||||
<blockTable colWidths="166.0,208.0,79.0,55.0" style="Table3">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_tblheader_General">BOM</para>
|
||||
<para style="terp_tblheader_General">BOM Name</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General">Product Name</para>
|
||||
@@ -91,23 +93,23 @@
|
||||
<para style="terp_tblheader_General_Right">Quantity</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_tblheader_General_Centre">Code</para>
|
||||
<para style="terp_tblheader_General_Centre">BOM Ref</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<blockTable colWidths="166.0,208.0,79.0,55.0" style="Table4">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.name ]]</para>
|
||||
<para style="terp_default_Bold_9">[[ o.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_9">[[ o.product_id.name ]]</para>
|
||||
<para style="terp_default_Bold_9"><font> [ [[ (o.product_id.default_code) or removeParentNode('font') ]] ] </font> <font> [[ o.product_id.name ]] </font> </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Right_9">[[ o.product_qty ]] [[ o.product_uom.name ]]</para>
|
||||
<para style="terp_default_Bold_Right_9">[[ o.product_qty ]] [[ o.product_uom.name ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="terp_default_Centre_9">[[ o.code ]]</para>
|
||||
<para style="terp_default_Bold_Centre_9">[[ o.code ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
@@ -116,10 +118,10 @@
|
||||
<blockTable colWidths="166.0,208.0,79.0,55.0" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P1"><font color="white">[[ '... '*(l['level']) ]]</font>-[[ l['name'] ]]</para>
|
||||
<para style="P1"><font color="white">[[ '... '*2*(l['level']) ]]</font>-[[ l['name'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P1">[[ l['pname'] ]]</para>
|
||||
<para style="P1"><font> [ [[ (l['pcode']) or removeParentNode('font') ]] ] </font> <font> [[ l['pname'] ]] </font> </para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P2">[[ l['pqty'] ]] [[ l['uname'] ]]</para>
|
||||
|
||||
@@ -48,18 +48,18 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search">
|
||||
<group col="16" colspan="6">
|
||||
<filter icon="terp-go-year" string=" 365 Days "
|
||||
domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')),('date_start','>',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Production performed in last 365 Days"/>
|
||||
<filter icon="terp-go-month" string=" 30 Days "
|
||||
<filter icon="terp-go-year" string="Year"
|
||||
domain="[('year','=',time.strftime('%%Y'))]"
|
||||
help="Production performed during current year"/>
|
||||
<filter icon="terp-go-month" string="Month"
|
||||
name="month"
|
||||
domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')), ('date_start','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Production performed in last 30 days"/>
|
||||
domain="[('month','=',time.strftime('%%m'))]"
|
||||
help="Production performed during current month"/>
|
||||
<filter icon="terp-go-week"
|
||||
string=" 7 Days "
|
||||
string="Month -1"
|
||||
separator="1"
|
||||
domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')), ('date_start','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Production during last 7 days"/>
|
||||
domain="[('date_start','<=', time.strftime('%%Y-%%m-%%d')), ('date_start','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Production during last month"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Current" icon="terp-check" domain="[('state','in',('open','draft'))]"/>
|
||||
<filter icon="terp-check" string="In Production" domain="[('state','=','in_production')]"/>
|
||||
@@ -79,10 +79,12 @@
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Company" icon="terp-go-home" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical" groups="base.group_multi_company"/>
|
||||
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Month" name="terp-go-month" icon="terp-go-month" context="{'group_by':'month'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}"/>
|
||||
</group>
|
||||
<newline/>
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<field name="model">report.workcenter.load</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Work Ccenters load">
|
||||
<field name="name" select="1"/>
|
||||
<field name="workcenter_id" select="1"/>
|
||||
<tree string="Work Centers load">
|
||||
<field name="name"/>
|
||||
<field name="workcenter_id"/>
|
||||
<field name="cycle"/>
|
||||
<field name="hour"/>
|
||||
</tree>
|
||||
@@ -22,26 +22,23 @@
|
||||
<field name="type">graph</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Work Center load" type="bar">
|
||||
<field name="name"/>
|
||||
<field group="True" name="name"/>
|
||||
<field name="cycle" operator="+"/>
|
||||
<field name="hour" operator="+"/>
|
||||
<field group="True" name="workcenter_id"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="view_workcenter_load_form" model="ir.ui.view">
|
||||
<field name="name">report.workcenter.load.form</field>
|
||||
|
||||
<record id="view_workcenter_load_search" model="ir.ui.view">
|
||||
<field name="name">report.workcenter.load.search</field>
|
||||
<field name="model">report.workcenter.load</field>
|
||||
<field name="type">form</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Work Center load" type="bar">
|
||||
<field name="name" select="1"/>
|
||||
<field name="workcenter_id" select="1"/>
|
||||
<field name="cycle"/>
|
||||
<field name="hour"/>
|
||||
</form>
|
||||
<search string="Work Center load">
|
||||
<field name="name"/>
|
||||
<field name="workcenter_id" widget="selection"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_report_workcenter_load_tree" model="ir.actions.act_window">
|
||||
@@ -49,6 +46,7 @@
|
||||
<field name="res_model">report.workcenter.load</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">graph,tree</field>
|
||||
<field name="search_view_id" ref="view_workcenter_load_search"/>
|
||||
<field name="help">Work Center Load is a projection of load in a work center given a period. The load is express in hour and cycle (for machines).</field>
|
||||
</record>
|
||||
<menuitem id="next_id_77" name="Reporting"
|
||||
|
||||
@@ -147,6 +147,7 @@ class report_custom(report_int):
|
||||
FROM mrp_production_workcenter_line, mrp_production, mrp_workcenter, resource_resource \
|
||||
WHERE (mrp_production_workcenter_line.production_id=mrp_production.id) \
|
||||
AND (mrp_production_workcenter_line.workcenter_id=mrp_workcenter.id) \
|
||||
AND (mrp_workcenter.resource_id=resource_resource.id) \
|
||||
AND (mrp_workcenter.id=%s) \
|
||||
AND (mrp_production.date_planned BETWEEN %s AND %s) \
|
||||
GROUP BY mrp_production_workcenter_line.workcenter_id, resource_resource.name, mrp_workcenter.id \
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
-
|
||||
!workflow {model: mrp.production, action: button_confirm, ref: mrp_production_mo1}
|
||||
-
|
||||
I am checking Procurement orders.
|
||||
I am checking Procurement orders for components of PC1.
|
||||
-
|
||||
!python {model: procurement.order}: |
|
||||
from tools.translate import _
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
<newline/>
|
||||
<separator colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-close' special="cancel"
|
||||
string="Close" />
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="change_prod_qty" string="Approve"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
</group>
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
<newline/>
|
||||
<separator string="" colspan="4"/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-close' special="cancel"
|
||||
string="Close" />
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="print_report" string="Print"
|
||||
colspan="1" type="object" icon="gtk-print" />
|
||||
</group>
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
<separator string="" colspan="4" />
|
||||
<label string="" colspan="2" />
|
||||
<group col="2" colspan="1">
|
||||
<button icon='gtk-close' special="cancel"
|
||||
string="Close" />
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="do_produce" string="Confirm"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
</group>
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
<field name="measure_unit"/>
|
||||
<newline/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-close' special="cancel"
|
||||
string="Close" />
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="print_report" string="Print"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
colspan="1" type="object" icon="gtk-print" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
|
||||
from osv import fields
|
||||
from osv import osv
|
||||
import ir
|
||||
import datetime
|
||||
import netsvc
|
||||
import time
|
||||
@@ -135,8 +134,6 @@ class mrp_production_workcenter_line(osv.osv):
|
||||
result = super(mrp_production_workcenter_line, self).write(cr, uid, ids, vals, context=context)
|
||||
prod_obj = self.pool.get('mrp.production')
|
||||
if vals.get('date_planned', False) and update:
|
||||
pids = {}
|
||||
pids2 = {}
|
||||
for prod in self.browse(cr, uid, ids, context=context):
|
||||
if prod.production_id.workcenter_lines:
|
||||
dstart = min(vals['date_planned'], prod.production_id.workcenter_lines[0]['date_planned'])
|
||||
@@ -496,25 +493,25 @@ class mrp_operations_operation(osv.osv):
|
||||
production_obj=self.pool.get('mrp.production').browse(cr,uid,vals['production_id'])
|
||||
wc_op_id.append(self.pool.get('mrp.production.workcenter.line').create(cr,uid,{'production_id':vals['production_id'],'name':production_obj.product_id.name,'workcenter_id':vals['workcenter_id']}))
|
||||
if code.start_stop=='start':
|
||||
tmp=self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id)
|
||||
self.pool.get('mrp.production.workcenter.line').action_start_working(cr,uid,wc_op_id)
|
||||
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_start_working', cr)
|
||||
|
||||
|
||||
if code.start_stop=='done':
|
||||
tmp=self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id)
|
||||
self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,wc_op_id)
|
||||
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_done', cr)
|
||||
self.pool.get('mrp.production').write(cr,uid,vals['production_id'],{'date_finnished':DateTime.now().strftime('%Y-%m-%d %H:%M:%S')})
|
||||
|
||||
if code.start_stop=='pause':
|
||||
tmp=self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id)
|
||||
self.pool.get('mrp.production.workcenter.line').action_pause(cr,uid,wc_op_id)
|
||||
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_pause', cr)
|
||||
|
||||
if code.start_stop=='resume':
|
||||
tmp=self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id)
|
||||
self.pool.get('mrp.production.workcenter.line').action_resume(cr,uid,wc_op_id)
|
||||
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_resume', cr)
|
||||
|
||||
if code.start_stop=='cancel':
|
||||
tmp=self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id)
|
||||
self.pool.get('mrp.production.workcenter.line').action_cancel(cr,uid,wc_op_id)
|
||||
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', wc_op_id[0], 'button_cancel', cr)
|
||||
|
||||
if not self.check_operation(cr, uid, vals):
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
<xpath expr="/form/notebook/page/field[@name='workcenter_lines']/form/field[@name='hour']" position="after">
|
||||
<group colspan="8" col="8">
|
||||
<field name="state"/>
|
||||
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="gtk-go-forward"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-cancel"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="gtk-ok"/>
|
||||
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert" help="Set to Draft"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="terp-gtk-jump-to-ltr" help="Start Working"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause" help="Resume Work Order"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-stop" help="Cancel Order"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause" help="Pause Work Order"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="terp-dialog-close" help="Finish Order"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -32,12 +32,12 @@
|
||||
<field name="inherit_id" ref="mrp.mrp_production_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/form/notebook/page/field[@name='workcenter_lines']/tree/field[@name='hour']" position="after">
|
||||
<button name="button_done" string="Finished" states="startworking" icon="gtk-ok"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-cancel"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="gtk-go-forward"/>
|
||||
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="terp-gtk-jump-to-ltr"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-stop"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="terp-dialog-close"/>
|
||||
<field name="state"/>
|
||||
</xpath>
|
||||
</field>
|
||||
@@ -49,7 +49,7 @@
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" eval="False"/>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Work Orders" colors="gray:state in ('done','cancel');black:state in ('draft','startworking');red: state=='pause'">
|
||||
<tree string="Work Orders" colors="gray:state in ('done','cancel');black:state in ('draft','startworking') and date_planned>=current_date;red:date_planned<current_date and state not in ('done','cancel')">
|
||||
<field name="production_id"/>
|
||||
<field name="date_planned"/>
|
||||
<field name="product"/>
|
||||
@@ -61,11 +61,11 @@
|
||||
<field name="hour"/>
|
||||
<field name="state" />
|
||||
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert" help="Set to Draft"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="gtk-go-forward" help="Start Working"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="terp-gtk-jump-to-ltr" help="Start Working"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause" help="Resume Work Order"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-cancel" help="Cancel Order"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-stop" help="Cancel Order"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause" help="Pause Work Order"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="gtk-ok" help="Finish Order"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="terp-dialog-close" help="Finish Order"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -111,15 +111,15 @@
|
||||
<field name="uom"/>
|
||||
</group>
|
||||
|
||||
<separator string="State" colspan="4"/>
|
||||
<separator string="" colspan="4"/>
|
||||
<group colspan="8" col="8">
|
||||
<field name="state"/>
|
||||
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="gtk-go-forward"/>
|
||||
<button name="button_start_working" string="Start" states="draft" icon="terp-gtk-jump-to-ltr"/>
|
||||
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-cancel"/>
|
||||
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-stop"/>
|
||||
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="gtk-ok"/>
|
||||
<button name="button_done" string="Finished" states="startworking" icon="terp-dialog-close"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
@@ -153,9 +153,9 @@
|
||||
<field name="date_planned" widget="date"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By" colspan="10" col="8" groups="base.group_extended">
|
||||
<filter string="Workcenter" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'workcenter_id'}"/>
|
||||
<filter string="Production" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'production_id'}"/>
|
||||
<group expand="0" string="Group By..." colspan="10" col="8" groups="base.group_extended">
|
||||
<filter string="Workcenter" icon="terp-go-home" domain="[]" context="{'group_by':'workcenter_id'}"/>
|
||||
<filter string="Production" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'production_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
@@ -249,7 +249,7 @@
|
||||
|
||||
</record>
|
||||
|
||||
<menuitem action="mrp.mrp_production_action"
|
||||
<menuitem action="mrp.mrp_production_action_planning"
|
||||
id="menu_mrp_production_order_action"
|
||||
parent="menu_mrp_planning" sequence="1"
|
||||
groups="base.group_extended"/>
|
||||
|
||||
@@ -109,7 +109,7 @@ class mrp_repair(osv.osv):
|
||||
('invoice_except','Invoice Exception'),
|
||||
('done','Done'),
|
||||
('cancel','Cancel')
|
||||
], 'Repair State', readonly=True,
|
||||
], 'State', readonly=True,
|
||||
help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed repair order. \
|
||||
\n* The \'Confirmed\' state is used when a user confirms the repair order. \
|
||||
\n* The \'Ready to Repair\' state is used to start to repairing, user can start repairing only after repair order is confirmed. \
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
<field name="model">mrp.repair</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Repairs order">
|
||||
<field name="name" select="1" />
|
||||
<tree string="Repairs order" colors="gray:state in ('done','cancel');black:state not in ('done','cancel');blue:state=='draft'">
|
||||
<field name="name" select="1" />
|
||||
<field name="product_id" select="1" />
|
||||
<field name="prodlot_id"/>
|
||||
<field name="move_id"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="address_id"/>
|
||||
<field name="location_id"/>
|
||||
<field name="move_id"/>
|
||||
<field name="location_dest_id"/>
|
||||
<field name="guarantee_limit"/>
|
||||
<field name="state"/>
|
||||
@@ -94,22 +93,22 @@
|
||||
<field name="amount_untaxed" sum="Untaxed amount"/>
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total" sum="Total amount"/>
|
||||
<button name="button_dummy" states="draft" string="Compute" type="object"/>
|
||||
<button name="button_dummy" states="draft" string="Compute" type="object" icon="terp-stock_format-scientific"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<separator string="" colspan="4"/>
|
||||
<group col="13" colspan="4">
|
||||
<field name="state"/>
|
||||
<button name="repair_confirm" states="draft" string="Confirm Repair" icon="gtk-apply"/>
|
||||
<button name="repair_ready" states="confirmed" string="Start Repair" icon="gtk-go-forward"/>
|
||||
<button name="action_repair_start" states="ready" string="Start Repair" icon="gtk-go-forward"/>
|
||||
<button name="action_repair_end" states="under_repair" string="End Repair" icon="gtk-ok"/>
|
||||
<button name="invoice_recreate" states="invoice_except" string="Recreate Invoice" icon="gtk-convert"/>
|
||||
<button name="invoice_corrected" states="invoice_except" string="Invoice Corrected" icon="gtk-apply"/>
|
||||
<button name="action_invoice_create" states="2binvoiced" string="Make Invoice" icon="gtk-ok"/>
|
||||
<button name="%(action_cancel_repair)d" states="invoice_except" string="Cancel Repair" type="action" icon="gtk-cancel"/>
|
||||
<button name="repair_confirm" states="draft" string="Confirm Repair" icon="terp-camera_test"/>
|
||||
<button name="repair_ready" states="confirmed" string="Start Repair" icon="terp-gtk-jump-to-ltr"/>
|
||||
<button name="action_repair_start" states="ready" string="Start Repair" icon="terp-gtk-jump-to-ltr"/>
|
||||
<button name="action_repair_end" states="under_repair" string="End Repair" icon="terp-dialog-close"/>
|
||||
<button name="invoice_recreate" states="invoice_except" string="Recreate Invoice" icon="terp-dolar"/>
|
||||
<button name="invoice_corrected" states="invoice_except" string="Invoice Corrected" icon="terp-emblem-important"/>
|
||||
<button name="action_invoice_create" states="2binvoiced" string="Make Invoice" icon="terp-dolar"/>
|
||||
<button name="%(action_cancel_repair)d" states="invoice_except" string="Cancel Repair" type="action" icon="gtk-stop"/>
|
||||
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="gtk-convert"/>
|
||||
<button name="cancel" states="draft" string="Cancel Repair" icon="gtk-cancel"/>
|
||||
<button name="%(action_cancel_repair)d" states="confirmed,2binvoiced,ready,under_repair" string="Cancel Repair" type="action" icon="gtk-cancel"/>
|
||||
<button name="cancel" states="draft" string="Cancel Repair" icon="gtk-stop"/>
|
||||
<button name="%(action_cancel_repair)d" states="confirmed,2binvoiced,ready,under_repair" string="Cancel Repair" type="action" icon="gtk-stop"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Invoicing">
|
||||
@@ -153,18 +152,18 @@
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Quality">
|
||||
<separator colspan="4" string="Internal Notes"/>
|
||||
<field colspan="4" name="internal_notes" nolabel="1"/>
|
||||
<separator colspan="4" string="Quotation Notes"/>
|
||||
<field colspan="4" name="quotation_notes" nolabel="1"/>
|
||||
</page>
|
||||
<page string="Extra Info" groups="base.group_extended">
|
||||
<field name="invoice_id"/>
|
||||
<field name="picking_id"/>
|
||||
<field name="location_id"/>
|
||||
<field name="location_dest_id" attrs="{'readonly':[('deliver_bool','=', False)], 'required':[('deliver_bool','=', True)]}"/>
|
||||
</page>
|
||||
<page string="Notes">
|
||||
<separator colspan="4" string="Internal Notes"/>
|
||||
<field colspan="4" name="internal_notes" nolabel="1"/>
|
||||
<separator colspan="4" string="Quotation Notes"/>
|
||||
<field colspan="4" name="quotation_notes" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
@@ -183,7 +182,7 @@
|
||||
<filter icon="terp-check" string="Confirmed" domain="[('state','=','confirmed')]" name="current" />
|
||||
<filter icon="terp-emblem-important" string="Ready To Repair" domain="[('state','=','ready')]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-dolar" string="invoiced" domain="[('state','=','2binvoiced')]"/>
|
||||
<filter icon="terp-dolar" string="invoiced" domain="[('invoiced','=',True)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="product_id"/>
|
||||
@@ -192,10 +191,11 @@
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="10" col="8" groups="base.group_extended">
|
||||
<filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<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'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'guarantee_limit'}"/>
|
||||
</group>
|
||||
</search>
|
||||
|
||||
@@ -69,8 +69,8 @@ class repair_cancel(osv.osv_memory):
|
||||
<group col="2" colspan="2">
|
||||
<label string="Do you want to continue?" colspan="4"/>
|
||||
<separator colspan="4"/>
|
||||
<button icon="gtk-cancel" special="cancel" string="No" readonly="0"/>
|
||||
<button name="cancel_repair" string="Yes" type="object" icon="gtk-ok"/>
|
||||
<button icon="gtk-stop" special="cancel" string="_No" readonly="0"/>
|
||||
<button name="cancel_repair" string="_Yes" type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
"""
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
<label string="This operation will cancel the Repair process, but will not cancel it's Invoice. Do you want to continue?" colspan="4"/>
|
||||
<newline/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="No" />
|
||||
<button name="cancel_repair" string="Yes"
|
||||
<button icon="gtk-stop" special="cancel"
|
||||
string="_No" />
|
||||
<button name="cancel_repair" string="_Yes"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
</group>
|
||||
</form>
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
<field name="group"/>
|
||||
<newline/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-close' special="cancel"
|
||||
string="Close" />
|
||||
<button name="make_invoices" string="Create Invoice"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
<button icon="gtk-stop" special="cancel"
|
||||
string="_Cancel" />
|
||||
<button name="make_invoices" string="Create _Invoice"
|
||||
colspan="1" type="object" icon="terp-dolar" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -31,8 +31,7 @@ class outlook_installer(osv.osv_memory):
|
||||
|
||||
def default_get(self, cr, uid, fields, context={}):
|
||||
data = super(outlook_installer, self).default_get(cr, uid, fields, context)
|
||||
doc_file = open(config['addons_path'] + "/outlook/doc/Installation Guide to OpenERP Outlook Plug-in.doc", 'r')
|
||||
data['doc_file'] = base64.encodestring(doc_file.read())
|
||||
data['doc_file'] = 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_outlook.html'
|
||||
file = open(config['addons_path'] + "/outlook/plugin/openerp-outlook-plugin.zip", 'r')
|
||||
data['plugin_file'] = base64.encodestring(file.read())
|
||||
return data
|
||||
@@ -42,7 +41,7 @@ class outlook_installer(osv.osv_memory):
|
||||
'doc_name':fields.char('File name', size=64),
|
||||
'outlook':fields.boolean('Outlook Plug-in ', help="Allows you to select an object that you’d like to add to your email and its attachments."),
|
||||
'plugin_file':fields.binary('Outlook Plug-in', readonly=True, help="outlook plug-in file. Save as this file and install this plug-in in outlook."),
|
||||
'doc_file':fields.binary('Installation Manual', help="The documentation file :- how to install Outlook Plug-in.", readonly=True),
|
||||
'doc_file':fields.char('Installation Manual',size="264",help="The documentation file :- how to install Outlook Plug-in.", readonly=True),
|
||||
'description':fields.text('Description', readonly=True)
|
||||
}
|
||||
|
||||
@@ -63,7 +62,7 @@ How to install openerp-outlook plug-in?
|
||||
3. Run “Register-plugin.bat” file.
|
||||
4. Run Outlook and Check addon has been registered.
|
||||
5. Tools->OpenERP Configuration and test your connection.
|
||||
6. See User Guide for more information.
|
||||
6. See User Guide for more information.
|
||||
7. Keep All extratced files in some safe places
|
||||
(e.g. python installation Directory "C:\pythonXX\" or Windows installation Directory "C:\Program Files\" ).
|
||||
"""
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<newline/>
|
||||
<field name="plugin_file" filename="name"/>
|
||||
<newline/>
|
||||
<field name="doc_file" filename="doc_name"/>
|
||||
<field name="doc_file" filename="doc_name" widget="url"/>
|
||||
<newline/>
|
||||
<separator string="Installation and Configuration Steps" colspan="4"/>
|
||||
<field name="description" nolabel="1" colspan="8"/>
|
||||
@@ -74,20 +74,15 @@
|
||||
<field name="context">{'menu':True}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="base.menu_base_config_mail"
|
||||
name="Mail"
|
||||
parent="base.menu_base_config"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="base.menu_base_config_plugins"
|
||||
name="Plugins"
|
||||
parent="base.menu_base_config_mail"
|
||||
<menuitem id="base.menu_base_config_plugins"
|
||||
name="Plugins"
|
||||
parent="base.menu_base_config"
|
||||
sequence="10" />
|
||||
|
||||
<menuitem id="menu_base_config_plugins_outlook"
|
||||
action="action_outlook_wizard"
|
||||
name="Outlook Plug-In"
|
||||
parent="base.menu_base_config_plugins"
|
||||
|
||||
<menuitem id="menu_base_config_plugins_outlook"
|
||||
action="action_outlook_wizard"
|
||||
name="Outlook Plug-In"
|
||||
parent="base.menu_base_config_plugins"
|
||||
sequence="10" />
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -86,7 +86,7 @@ EXSTYLE WS_EX_CONTEXTHELP
|
||||
CAPTION "About"
|
||||
FONT 8, "Tahoma", 400, 0, 0x0
|
||||
BEGIN
|
||||
GROUPBOX "About Plugin",IDC_STATIC,7,3,422,200
|
||||
GROUPBOX "About OpenERP Outlook Plugin",IDC_STATIC,7,3,422,200
|
||||
CONTROL 1062,IDB_OPENERPLOGO,"Static",SS_BITMAP | SS_REALSIZEIMAGE,60,30,20,20
|
||||
LTEXT "",IDC_ABOUT,80,90,250,100
|
||||
END
|
||||
|
||||
@@ -280,8 +280,8 @@ class pos_order(osv.osv):
|
||||
'date_validation': fields.function(_get_date_payment, method=True, string='Validation Date', type='date', store=True),
|
||||
'date_payment': fields.function(_get_date_payment2, method=True, string='Payment Date', type='date', store=True),
|
||||
'date_validity': fields.date('Validity Date', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Connected Salesman'),
|
||||
'user_salesman_id': fields.many2one('res.users', 'Cashier', required=True),
|
||||
'user_id': fields.many2one('res.users', 'Connected Salesman', help="Person who uses the the register. It could be a reliever, a student or an interim employee."),
|
||||
'user_salesman_id': fields.many2one('res.users', 'Cashier', required=True, help="User who is logged into the system."),
|
||||
'sale_manager': fields.many2one('res.users', 'Salesman Manager'),
|
||||
'amount_tax': fields.function(_amount_all, method=True, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'),
|
||||
'amount_total': fields.function(_amount_total, method=True, string='Total'),
|
||||
@@ -295,7 +295,7 @@ class pos_order(osv.osv):
|
||||
'payments': fields.one2many('pos.payment', 'order_id', 'Order Payments', states={'draft': [('readonly', False)]}, readonly=True),
|
||||
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True, states={'draft': [('readonly', False)]}, readonly=True),
|
||||
'partner_id': fields.many2one( 'res.partner', 'Customer', change_default=True, select=1, states={'draft': [('readonly', False)], 'paid': [('readonly', False)]}),
|
||||
'state': fields.selection([('draft', 'Draft'), ('payment', 'Payment'),
|
||||
'state': fields.selection([('draft', 'Quotation'), ('payment', 'Payment'),
|
||||
('advance','Advance'),
|
||||
('paid', 'Paid'), ('done', 'Done'), ('invoiced', 'Invoiced'), ('cancel', 'Cancel')],
|
||||
'State', readonly=True, ),
|
||||
@@ -358,7 +358,7 @@ class pos_order(osv.osv):
|
||||
|
||||
|
||||
def test_order_lines(self, cr, uid, order, context=None):
|
||||
""" Test order line is created or not for the order "
|
||||
""" Test order line is created or not for the order "
|
||||
@param name: Names of fields.
|
||||
@return: True
|
||||
"""
|
||||
@@ -581,7 +581,7 @@ class pos_order(osv.osv):
|
||||
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context)
|
||||
args['account_id'] = order.partner_id and order.partner_id.property_account_receivable and order.partner_id.property_account_receivable.id or account_def.id or curr_c.account_receivable.id
|
||||
if data.get('is_acc',False):
|
||||
args['is_acc']=data['is_acc']
|
||||
args['is_acc'] = data['is_acc']
|
||||
args['account_id']= prod_obj.browse(cr,uid, data['product_id']).property_account_income and prod_obj.browse(cr,uid, data['product_id']).property_account_income.id
|
||||
if not args['account_id']:
|
||||
raise osv.except_osv(_('Error'), _('Please provide an account for the product: %s')%(prod_obj.browse(cr,uid, data['product_id']).name))
|
||||
@@ -631,7 +631,7 @@ class pos_order(osv.osv):
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
wf_service.trg_write(uid, 'pos.order', order_id, cr)
|
||||
|
||||
return order_line_id
|
||||
return order_line_id, price
|
||||
|
||||
def refund(self, cr, uid, ids, context=None):
|
||||
"""Create a copy of order for refund order"""
|
||||
@@ -1270,9 +1270,9 @@ pos_payment()
|
||||
class product_product(osv.osv):
|
||||
_inherit = 'product.product'
|
||||
_columns = {
|
||||
'income_pdt': fields.boolean('Product for Incoming'),
|
||||
'income_pdt': fields.boolean('Product for Input'),
|
||||
'expense_pdt': fields.boolean('Product for expenses'),
|
||||
'am_out': fields.boolean('Controle for Outgoing Operations'),
|
||||
'am_out': fields.boolean('Controle for Output Operations'),
|
||||
'disc_controle': fields.boolean('Discount Controle '),
|
||||
}
|
||||
_defaults = {
|
||||
|
||||
@@ -12,12 +12,14 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sales Order POS">
|
||||
<group col="6" colspan="4">
|
||||
<field name="name"/>
|
||||
<field name="date_order"/>
|
||||
<field name="shop_id" widget="selection"/>
|
||||
<field name="partner_id" on_change="onchange_partner_pricelist(partner_id)"/>
|
||||
<field name="contract_number" groups="base.group_extended"/>
|
||||
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Sale Order ">
|
||||
<notebook colspan="4">
|
||||
<page string="Sale Order">
|
||||
<field name="lines" colspan="4" nolabel="1">
|
||||
<tree string="Order lines" editable="bottom">
|
||||
<field name="product_id" on_change="onchange_product_id(parent.pricelist_id,product_id,qty,parent.partner_id)" width="275" />
|
||||
@@ -29,7 +31,7 @@
|
||||
<field name="price_subtotal" />
|
||||
<field name="price_subtotal_incl" sum="Subtotal"/>
|
||||
</tree>
|
||||
<form string="Order lines" >
|
||||
<form string="Order lines">
|
||||
<field name="product_id" on_change="onchange_product_id(parent.pricelist_id,product_id,qty,parent.partner_id)" width="275"/>
|
||||
<field name="qty"/>
|
||||
<field name="qty_rfd" groups="base.group_extended"/>
|
||||
@@ -39,46 +41,23 @@
|
||||
<field name="notice"/>
|
||||
<field name="serial_number"/>
|
||||
</form>
|
||||
|
||||
</field>
|
||||
<group colspan="4" col="7">
|
||||
<field name="amount_tax"/>
|
||||
<field name="amount_total"/>
|
||||
</group>
|
||||
|
||||
<separator colspan="4" string="Actions"/>
|
||||
<separator colspan="4"/>
|
||||
<group colspan="4" col="6">
|
||||
<field name="state" />
|
||||
<button name="%(action_pos_payment)d" string="Ma_ke Payment" icon="gtk-ok" type="action" states="draft,advance" />
|
||||
<button name="%(action_report_pos_receipt)d" string="_Reprint" icon="gtk-print" type="action" states="paid,done,invoiced"/>
|
||||
<button name="%(action_pos_payment)d" string="Make Payment" icon="terp-dolar" type="action" states="draft,advance" />
|
||||
<button name="%(action_report_pos_receipt)d" string="Reprint" icon="gtk-print" type="action" states="paid,done,invoiced"/>
|
||||
<button name="set_to_draft" string="Set to draft" states="paid" icon="gtk-execute" type="object" />
|
||||
<button name="%(action_view_pos_return)d" string="Return Picking" type="action" icon="gtk-ok" states="paid"
|
||||
attrs="{'invisible':[('state','!=','paid'),('state','!=','invoiced')]}" context="{'return':'return'}" />
|
||||
</group>
|
||||
</page>
|
||||
|
||||
<page string="Order and Payment">
|
||||
<group colspan="2" col="2" name="Type">
|
||||
<separator string="Order Information" colspan="4"/>
|
||||
<field name="name"/>
|
||||
<field name="shop_id" widget="selection"/>
|
||||
<field name="user_salesman_id" />
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="price_type" />
|
||||
<field name="user_id" string="Salesman" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group colspan="2" col="2" name="Type">
|
||||
<separator string="Dates" colspan="4"/>
|
||||
<field name="date_order"/>
|
||||
<field name="date_validation" />
|
||||
<field name="date_payment" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group colspan="4">
|
||||
<field name="partner_id" on_change="onchange_partner_pricelist(partner_id)" invisible="1"/>
|
||||
<field name="sale_journal" domain="[('type','=','sale')]" widget="selection" invisible="1"/>
|
||||
<field name="pricelist_id" domain="[('type','=','sale')]" widget="selection" invisible="1"/>
|
||||
</group>
|
||||
|
||||
<page string="Payment">
|
||||
<field name="statement_ids" colspan="4" nolabel="1">
|
||||
<tree editable="bottom" string="Statement lines">
|
||||
<field name="amount"/>
|
||||
@@ -92,12 +71,28 @@
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
|
||||
<page string="Extra Info">
|
||||
<group colspan="2" col="2" name="Type">
|
||||
<separator string="Other Information" colspan="4"/>
|
||||
<field name="user_salesman_id" />
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="price_type" />
|
||||
<field name="user_id" string="Salesman" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group colspan="2" col="2" name="Type">
|
||||
<separator string="Dates" colspan="4"/>
|
||||
<field name="date_validation" />
|
||||
<field name="date_payment" groups="base.group_extended"/>
|
||||
</group>
|
||||
<group colspan="4">
|
||||
<field name="sale_journal" domain="[('type','=','sale')]" widget="selection" invisible="1"/>
|
||||
<field name="pricelist_id" domain="[('type','=','sale')]" widget="selection" invisible="1"/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Notes" >
|
||||
<field colspan="4" name="note" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -114,16 +109,17 @@
|
||||
<field name="model">pos.order</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="POS Orders">
|
||||
<tree string="POS Orders" colors="blue:state == 'draft';gray:state in ('done','cancel');black:state not in('done','cancel')">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="date_order"/>
|
||||
<field name="date_validation"/>
|
||||
<field name="date_payment"/>
|
||||
<field name="user_id"/>
|
||||
<field name="invoice_id"/>
|
||||
<field name="state" />
|
||||
<field name="amount_total" sum="Amount total"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -136,16 +132,18 @@
|
||||
<filter icon="terp-document-new" string="Quotations" domain="[('state','=','draft')]"/>
|
||||
<filter icon="terp-check" string="Running" domain="[('state','in',('payment','advance'))]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name" select="1"/>
|
||||
<field name="partner_id" select="1"/>
|
||||
<field name="user_id" select="1"/>
|
||||
<field name="date_order" select="1" string="Order date" />
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="user_id"/>
|
||||
<field name="date_order" string="Order date"/>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_extended">
|
||||
<filter string="Customer" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
|
||||
<filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<separator string="" orientation="vertical"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<separator string="" orientation="vertical"/>
|
||||
<filter string="Order Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_order'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -788,33 +786,6 @@
|
||||
action="action_box_out"
|
||||
id="menu_wizard_enter_jrnl2" sequence="3" />
|
||||
|
||||
<record model="ir.ui.view" id="view_pos_order_tree_all_sales">
|
||||
<field name="name">POS Sales</field>
|
||||
<field name="model">pos.order</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="POS Orders">
|
||||
<field name="name"/>
|
||||
<field name="date_order" select="1"/>
|
||||
<field name="partner_id" />
|
||||
<field name="date_validation"/>
|
||||
<field name="date_payment"/>
|
||||
<field name="user_id"/>
|
||||
<field name="invoice_id"/>
|
||||
<field name="note" select="1" />
|
||||
<field name="state" select="1"/>
|
||||
<field name="amount_total" sum="Amount total"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.actions.act_window" id="action_pos_all_sales">
|
||||
<field name="name">All sales</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">pos.order</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_id" ref="view_pos_order_tree_all_sales" />
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_pos_order_tree_all_sales_lines">
|
||||
<field name="name">POS Sales Lines</field>
|
||||
<field name="model">pos.order.line</field>
|
||||
|
||||
@@ -37,12 +37,20 @@ class pos_payment_report_date(report_sxw.rml_parse):
|
||||
dt1 = form['date_start'] + ' 00:00:00'
|
||||
dt2 = form['date_end'] + ' 23:59:59'
|
||||
data={}
|
||||
self.cr.execute ("select pt.name,pol.qty,pol.discount,pol.price_unit, " \
|
||||
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s and po.user_id IN %s " \
|
||||
,(dt1,dt2,tuple(form['user_id'])))
|
||||
if form['user_id']:
|
||||
self.cr.execute ("select pt.name,pol.qty,pol.discount,pol.price_unit, " \
|
||||
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s and po.user_id IN %s " \
|
||||
,(dt1,dt2,tuple(form['user_id'])))
|
||||
else:
|
||||
self.cr.execute ("select pt.name,pol.qty,pol.discount,pol.price_unit, " \
|
||||
"(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) as total " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s" \
|
||||
,(dt1,dt2))
|
||||
data=self.cr.dictfetchall()
|
||||
return data
|
||||
|
||||
@@ -50,11 +58,18 @@ class pos_payment_report_date(report_sxw.rml_parse):
|
||||
dt1 = form['date_start'] + ' 00:00:00'
|
||||
dt2 = form['date_end'] + ' 23:59:59'
|
||||
res=[]
|
||||
self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s and po.user_id IN %s " \
|
||||
,(dt1,dt2,tuple(form['user_id'])))
|
||||
if form['user_id']:
|
||||
self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s and po.user_id IN %s " \
|
||||
,(dt1,dt2,tuple(form['user_id'])))
|
||||
else:
|
||||
self.cr.execute ("select sum(pol.price_unit * pol.qty * (1 - (pol.discount) / 100.0)) " \
|
||||
"from pos_order as po,pos_order_line as pol,product_product as pp,product_template as pt " \
|
||||
"where pt.id=pp.product_tmpl_id and pp.id=pol.product_id and po.id = pol.order_id " \
|
||||
"and po.state IN ('paid','invoiced') and po.date_order >= %s and po.date_order <= %s" \
|
||||
,(dt1,dt2))
|
||||
res=self.cr.fetchone()[0] or 0.0
|
||||
return res
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ class report_cash_register(osv.osv):
|
||||
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
|
||||
'day': fields.char('Day', size=128, readonly=True),
|
||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||
'state':fields.selection([('draft', 'Draft'),('confirm', 'Confirmed')],'State'),
|
||||
'state': fields.selection([('draft', 'Quotation'),('open','Open'),('confirm', 'Confirmed')],'State'),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal'),
|
||||
'balance_start': fields.float('Opening Balance'),
|
||||
'balance_end_real': fields.float('Closing Balance'),
|
||||
|
||||
@@ -27,17 +27,17 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Point of Sale Cash Register 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="Cash Analysis created last 365 days"/>
|
||||
<filter icon="terp-go-month" string=" 30 Days "
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Cash Analysis created in last 30 days"/>
|
||||
<filter icon="terp-go-week"
|
||||
string=" 7 Days "
|
||||
<filter icon="terp-go-year" string="Year"
|
||||
domain="[('year','=',time.strftime('%%Y'))]"
|
||||
help="Cash Analysis created during this year"/>
|
||||
<filter icon="terp-go-month" string="Month"
|
||||
domain="[('month','=',time.strftime('%%m'))]"
|
||||
help="Cash Analysis created in current month"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="Month -1"
|
||||
separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Cash Analysis created last 7 days"/>
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="Cash Analysis created in last month"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today"
|
||||
string=" Today "
|
||||
@@ -67,16 +67,16 @@
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="state" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-today" 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'}"/>
|
||||
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day from Creation date of register"/>
|
||||
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Month from Creation date of register"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year from Creation date of register"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_report_cash_register_all" model="ir.actions.act_window">
|
||||
<field name="name">Cash Register Analysis</field>
|
||||
<field name="name">Register Analysis</field>
|
||||
<field name="res_model">report.cash.register</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
|
||||
@@ -88,6 +88,8 @@ class report_pos_order(osv.osv):
|
||||
to_char(s.date_order, 'dd-MM-YYYY'),to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'),
|
||||
to_char(s.date_order, 'YYYY-MM-DD'), s.partner_id,s.state,
|
||||
s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.date_validation,
|
||||
s.date_payment)""")
|
||||
s.date_payment
|
||||
having
|
||||
sum(l.qty * u.factor) != 0)""")
|
||||
|
||||
report_pos_order()
|
||||
|
||||
@@ -38,20 +38,20 @@
|
||||
<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 "
|
||||
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 "
|
||||
<filter icon="terp-go-year" string="Year"
|
||||
domain="[('year','=',time.strftime('%%Y'))]"
|
||||
help="POS ordered created during current year"/>
|
||||
<filter icon="terp-go-month" string="Month"
|
||||
domain="[('month','=',time.strftime('%%m'))]"
|
||||
help="POS ordered created during current month"/>
|
||||
<filter icon="terp-go-month"
|
||||
string="Month -1"
|
||||
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"/>
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d')), ('date','>',(datetime.date.today()-datetime.timedelta(days=30)).strftime('%%Y-%%m-%%d'))]"
|
||||
help="POS ordered created last month"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-go-today"
|
||||
string=" Today "
|
||||
string="Today"
|
||||
name="today"
|
||||
separator="1"
|
||||
domain="[('date','<=', time.strftime('%%Y-%%m-%%d'))]"
|
||||
@@ -79,9 +79,9 @@
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Product" icon="terp-accessories-archiver" context="{'group_by':'product_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Day" icon="terp-go-today" 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'}"/>
|
||||
<filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Day of order date"/>
|
||||
<filter string="Month" icon="terp-go-month" context="{'group_by':'month'}" help="Month of order date"/>
|
||||
<filter string="Year" icon="terp-go-year" context="{'group_by':'year'}" help="Year of order date"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Extended Filters..." groups="base.group_extended">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"access_report_pos_order_system","report.pos.order.system","model_report_pos_order","base.group_system",1,1,1,1
|
||||
"access_report_pos_order","report.pos.order","model_report_pos_order","group_pos_manager",1,1,1,1
|
||||
"access_account_bank_statement","account.bank.statement","account.model_account_bank_statement","group_pos_user",1,1,1,0
|
||||
"access_account_bank_statement_manager","account.bank.statement manager","account.model_account_bank_statement","group_pos_manager",1,0,0,0
|
||||
"access_account_bank_statement_manager","account.bank.statement manager","account.model_account_bank_statement","group_pos_manager",1,1,1,1
|
||||
"access_account_bank_statement_system","account.bank.statement system","account.model_account_bank_statement","base.group_system",1,0,0,0
|
||||
"access_account_bank_statement_line","account.bank.statement.line","account.model_account_bank_statement_line","group_pos_user",1,1,1,0
|
||||
"access_account_period_pos","account.period pos user","account.model_account_period","group_pos_user",1,1,1,0
|
||||
@@ -35,11 +35,13 @@
|
||||
"access_account_fiscalyear_pos_manager","account.fiscalyear manager","account.model_account_fiscalyear","group_pos_manager",1,0,0,0
|
||||
"access_account_fiscalyear_pos_system","account.fiscalyear user","account.model_account_fiscalyear","base.group_system",1,0,0,0
|
||||
"access_account_cashbox_line","account.cashbox.line","account.model_account_cashbox_line","group_pos_user",1,1,1,0
|
||||
"access_account_cashbox_line_manager","account.cashbox.line manager","account.model_account_cashbox_line","group_pos_manager",1,1,1,1
|
||||
"access_product_product","product.product","product.model_product_product","group_pos_user",1,0,0,0
|
||||
"access_product_template_pos_user","product.template pos user","product.model_product_template","group_pos_user",1,0,0,0
|
||||
"access_product_product_pos_manager","product.product.pos manager","product.model_product_product","group_pos_manager",1,0,0,0
|
||||
"access_product_template_pos_manager","product.template pos manager","product.model_product_template","group_pos_manager",1,0,0,0
|
||||
"access_account_move_line","account.move.line","account.model_account_move_line","group_pos_user",1,1,1,0
|
||||
"access_account_move_line_manager","account.move.line manager","account.model_account_move_line","group_pos_manager",1,1,1,1
|
||||
"access_account_move","account.move","account.model_account_move","group_pos_user",1,1,1,0
|
||||
"access_account_journal","account.journal","account.model_account_journal","group_pos_user",1,1,1,0
|
||||
"access_account_journal_manager","account.journal manager","account.model_account_journal","group_pos_manager",1,0,0,0
|
||||
@@ -57,7 +59,7 @@
|
||||
"access_product_template_pos","product.template pos","product.model_product_template","base.group_system",1,1,1,1
|
||||
"access_pos_order_system","pos.order system","model_pos_order","base.group_system",1,0,0,0
|
||||
"access_pos_order_line_system","pos.order.line system","model_pos_order_line","base.group_system",1,0,0,0
|
||||
"access_account_bank_statement_line_manager","account.bank.statement.line manager","account.model_account_bank_statement_line","group_pos_manager",1,0,0,0
|
||||
"access_account_bank_statement_line_manager","account.bank.statement.line manager","account.model_account_bank_statement_line","group_pos_manager",1,1,1,1
|
||||
"access_account_invoice_manager","account.invoice manager","account.model_account_invoice","group_pos_manager",1,1,1,1
|
||||
"access_pos_payment_manager","pos.payment manager","model_pos_payment","group_pos_manager",1,0,0,0
|
||||
"access_report_transaction_pos_system","report.transaction.pos system","model_report_transaction_pos","base.group_system",1,1,1,1
|
||||
|
||||
|
@@ -32,6 +32,57 @@
|
||||
id="menu_all_menu_cash_register"
|
||||
sequence="4"
|
||||
/>-->
|
||||
|
||||
<record id="view_pos_open_cash_statement_filter" model="ir.ui.view">
|
||||
<field name="name">account.bank.statement.inherit</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Cash Statements">
|
||||
<group col="8" colspan="4">
|
||||
<filter string="Open" domain="[('state','=','open')]" icon="terp-document-new" name="open"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Journal" context="{'group_by': 'journal_id'}" icon="terp-folder-orange"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Period" context="{'group_by': 'period_id'}" icon="terp-go-month"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_pos_confirm_cash_statement_filter" model="ir.ui.view">
|
||||
<field name="name">account.bank.statement.inherit2</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="type">search</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Cash Statements">
|
||||
<group col="8" colspan="4">
|
||||
<filter string="Open" domain="[('state','=','open')]" icon="terp-document-new" name="open"/>
|
||||
<filter string="Confirm" domain="[('state','=','confirm')]" icon="terp-camera_test"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="date"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By...">
|
||||
<filter string="Journal" context="{'group_by': 'journal_id'}" icon="terp-folder-orange"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Period" context="{'group_by': 'period_id'}" icon="terp-go-month"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="State" context="{'group_by': 'state'}" icon="terp-stock_effects-object-colorize"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_new_bank_statement_tree" model="ir.actions.act_window">
|
||||
<field name="name">Cash Register</field>
|
||||
@@ -56,8 +107,20 @@
|
||||
<field name="act_window_id" ref="action_new_bank_statement_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="view_cash_statement_pos_tree" model="ir.ui.view">
|
||||
<field name="name">account.bank.statement.tree</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="inherit_id" ref="account.view_cash_statement_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="journal_id" position="after">
|
||||
<field name="user_id"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_new_bank_statement_all_tree" model="ir.actions.act_window">
|
||||
<field name="name">All Register</field>
|
||||
<field name="name">Registers</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">account.bank.statement</field>
|
||||
<field name="view_type">form</field>
|
||||
@@ -68,7 +131,7 @@
|
||||
<record model="ir.actions.act_window.view" id="act_cash_statement_all_register1">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="account.view_bank_statement_tree"/>
|
||||
<field name="view_id" ref="view_cash_statement_pos_tree"/>
|
||||
<field name="act_window_id" ref="action_new_bank_statement_all_tree"/>
|
||||
</record>
|
||||
<record model="ir.actions.act_window.view" id="act_cash_statement_all_register">
|
||||
@@ -79,7 +142,7 @@
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="All Registers"
|
||||
name="Registers"
|
||||
parent="menu_cash_register"
|
||||
action="action_new_bank_statement_all_tree"
|
||||
id="menu_all_menu_all_register"
|
||||
@@ -89,14 +152,14 @@
|
||||
<menuitem name="Register management" parent="point_of_sale.menu_point_root"
|
||||
id="menu_point_open_config" sequence="1"/>
|
||||
<menuitem
|
||||
name="Open my Cash Registers" parent="menu_point_open_config"
|
||||
string="Open my Cash Register"
|
||||
name="Open Registers" parent="menu_point_open_config"
|
||||
string="Open Registers"
|
||||
action="action_pos_open_statement"
|
||||
id="menu_open_statement" sequence="1" />
|
||||
|
||||
<menuitem
|
||||
name="Close my Cash Register" parent="menu_point_open_config"
|
||||
string="Close my Cash Register"
|
||||
name="Close Registers" parent="menu_point_open_config"
|
||||
string="Close Registers"
|
||||
action="action_pos_close_statement"
|
||||
id="menu_close_statement" sequence="2" />
|
||||
|
||||
|
||||
@@ -1,48 +1,40 @@
|
||||
-
|
||||
In order to test the POS in module, To gives business owners a convenient way of checking out customers and of recording sales.
|
||||
In order to test the POS in module, To give business owners a convenient way of checking out customers and of recording sales.
|
||||
|
||||
-
|
||||
I configure all details for the customer,Salesman and Product ,Account.
|
||||
I configure all details for the Customer, Salesman and Product, Account.
|
||||
-
|
||||
I create View Account Type.
|
||||
I create View Account Type.
|
||||
-
|
||||
!record {model: account.account.type, id: account_account_type_view0}:
|
||||
close_method: none
|
||||
code: View
|
||||
name: View
|
||||
sign: 1
|
||||
|
||||
|
||||
-
|
||||
I create Income Account Type.
|
||||
I create Income Account Type.
|
||||
-
|
||||
!record {model: account.account.type, id: account_account_type_income0}:
|
||||
close_method: unreconciled
|
||||
code: Income
|
||||
name: Income
|
||||
sign: 1
|
||||
|
||||
|
||||
-
|
||||
I create Expense Account Type.
|
||||
I create Expense Account Type.
|
||||
-
|
||||
!record {model: account.account.type, id: account_account_type_expense0}:
|
||||
close_method: unreconciled
|
||||
code: Expense
|
||||
name: Expense
|
||||
sign: 1
|
||||
|
||||
|
||||
-
|
||||
I create Cash Account Type.
|
||||
I create Cash Account Type.
|
||||
-
|
||||
!record {model: account.account.type, id: account_account_type_cash0}:
|
||||
close_method: balance
|
||||
code: Cash
|
||||
name: Cash
|
||||
sign: 1
|
||||
|
||||
|
||||
-
|
||||
I create Minimal Chart Account.
|
||||
-
|
||||
@@ -69,8 +61,6 @@
|
||||
reconcile: true
|
||||
type: payable
|
||||
user_type: account_account_type_expense0
|
||||
|
||||
|
||||
-
|
||||
I create Receivable Account.
|
||||
-
|
||||
@@ -85,8 +75,6 @@
|
||||
reconcile: true
|
||||
type: receivable
|
||||
user_type: account_account_type_income0
|
||||
|
||||
|
||||
-
|
||||
I create Cash Account.
|
||||
-
|
||||
@@ -100,8 +88,6 @@
|
||||
parent_right: 7
|
||||
type: other
|
||||
user_type: account_account_type_cash0
|
||||
|
||||
|
||||
-
|
||||
I create Purchases Account.
|
||||
-
|
||||
@@ -116,7 +102,7 @@
|
||||
type: other
|
||||
user_type: account_account_type_expense0
|
||||
-
|
||||
I create Sales Account.
|
||||
I create Sales Account.
|
||||
-
|
||||
!record {model: account.account, id: account_account_sales0}:
|
||||
code: Sale
|
||||
@@ -128,7 +114,6 @@
|
||||
parent_right: 11
|
||||
type: other
|
||||
user_type: account_account_type_income0
|
||||
|
||||
-
|
||||
I create Purchase Journal.
|
||||
-
|
||||
@@ -141,10 +126,8 @@
|
||||
sequence_id: account.sequence_purchase_journal
|
||||
type: purchase
|
||||
view_id: account.account_journal_view
|
||||
|
||||
|
||||
-
|
||||
I create Sale Journal.
|
||||
I create Sale Journal.
|
||||
-
|
||||
!record {model: account.journal, id: account_journal_salejournal0}:
|
||||
code: SAJ
|
||||
@@ -155,10 +138,8 @@
|
||||
sequence_id: account.sequence_sale_journal
|
||||
type: sale
|
||||
view_id: account.account_journal_view
|
||||
|
||||
|
||||
-
|
||||
I create Bank Journal.
|
||||
I create Bank Journal.
|
||||
-
|
||||
!record {model: account.journal, id: account_journal_bankjournal0}:
|
||||
code: BNK
|
||||
@@ -169,7 +150,6 @@
|
||||
sequence_id: account.sequence_journal
|
||||
type: cash
|
||||
view_id: account.account_journal_bank_view
|
||||
|
||||
-
|
||||
I create property for account payable.
|
||||
-
|
||||
@@ -178,10 +158,8 @@
|
||||
fields_id: account.field_res_partner_property_account_payable
|
||||
name: property_account_expense_categ
|
||||
value_reference: account.account,5
|
||||
|
||||
|
||||
-
|
||||
I create property for account receivable.
|
||||
I create property for account receivable.
|
||||
-
|
||||
!record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
|
||||
company_id: base.main_company
|
||||
@@ -200,25 +178,19 @@
|
||||
category_id:
|
||||
- res_partner_category_customers0
|
||||
name: Cleartrail
|
||||
|
||||
|
||||
-
|
||||
I create partner address.
|
||||
I create partner address.
|
||||
-
|
||||
!record {model: res.partner.address, id: res_partner_address_1}:
|
||||
partner_id: res_partner_cleartrail0
|
||||
street: onam plaza, 14 B palasia A B Road
|
||||
type: contact
|
||||
|
||||
|
||||
-
|
||||
I create partner invoice address.
|
||||
-
|
||||
!record {model: res.partner.address, id: res_partner_address_2}:
|
||||
partner_id: res_partner_cleartrail0
|
||||
type: invoice
|
||||
|
||||
|
||||
-
|
||||
I create partner delivery address.
|
||||
-
|
||||
@@ -241,7 +213,6 @@
|
||||
property_account_payable: account_account_payable1
|
||||
property_account_receivable: account_account_receivable0
|
||||
supplier: true
|
||||
|
||||
-
|
||||
I create partner address .
|
||||
-
|
||||
@@ -270,7 +241,6 @@
|
||||
type: product
|
||||
uom_id: product.product_uom_unit
|
||||
uom_po_id: product.product_uom_unit
|
||||
|
||||
-
|
||||
I create product LG Viewty Smart.
|
||||
-
|
||||
@@ -294,7 +264,6 @@
|
||||
-
|
||||
!record {model: product.category, id: product_category_computer0}:
|
||||
name: Computer
|
||||
|
||||
-
|
||||
I create product HP Pavilion Desktop PCs
|
||||
-
|
||||
@@ -315,11 +284,9 @@
|
||||
uom_po_id: product.product_uom_unit
|
||||
property_account_expense: account_account_payable1
|
||||
property_account_income: account_account_receivable0
|
||||
|
||||
-
|
||||
I create New Order by adding the details of Salesman and "Product" as LG Viewty Smart Quantity as 10.
|
||||
-
|
||||
|
||||
!record {model: pos.order, id: pos_order_pos0}:
|
||||
company_id: base.main_company
|
||||
date_order: '2010-05-13 15:02:48'
|
||||
@@ -351,13 +318,11 @@
|
||||
self.apply_discount(cr, uid, [ref("pos_discount_0")], {"lang": "en_US", "active_model":
|
||||
"pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id":
|
||||
ref("pos_order_pos0"), })
|
||||
|
||||
-
|
||||
I open the register.
|
||||
-
|
||||
!record {model: pos.open.statement, id: pos_open_statement_0}:
|
||||
{}
|
||||
|
||||
-
|
||||
I open the statement.
|
||||
-
|
||||
@@ -365,19 +330,17 @@
|
||||
self.open_statement(cr, uid, [ref("pos_open_statement_0")], {"lang": "en_US", "active_model":
|
||||
"ir.ui.menu", "active_ids": [ref("point_of_sale.menu_open_statement")], "tz":
|
||||
False, "active_id": ref("point_of_sale.menu_open_statement"), })
|
||||
|
||||
-
|
||||
I click on the "Make Payment" wizard.
|
||||
-
|
||||
!record {model: pos.make.payment, id: pos_make_payment_0}:
|
||||
amount: 1615.0
|
||||
journal: 7
|
||||
payment_date: 2010-05-13
|
||||
payment_date: "2010-05-13"
|
||||
payment_name: Payment
|
||||
product_id: product_product_hppaviliondesktoppcs0
|
||||
pricelist_id: product.list0
|
||||
partner_id: base.res_partner_agrolait
|
||||
|
||||
-
|
||||
I make the payment.
|
||||
-
|
||||
@@ -391,7 +354,6 @@
|
||||
!python {model: pos.order}: |
|
||||
order=self.browse(cr,uid,ref("pos_order_pos0"))
|
||||
assert(order.statement_ids!=[]), "Statement lines not created"
|
||||
|
||||
-
|
||||
When I click on Return picking button , I get three option.
|
||||
-
|
||||
@@ -412,8 +374,6 @@
|
||||
self.create_returns(cr, uid, [ref("pos_return_0")], {"lang": "en_US", "active_model":
|
||||
"pos.order", "active_ids": [ref("point_of_sale.pos_order_pos0")], "tz":
|
||||
False, "active_id": ref("point_of_sale.pos_order_pos0"), })
|
||||
|
||||
|
||||
-
|
||||
Then it allows me to define the quantity of products, which will return to the stock.
|
||||
-
|
||||
@@ -432,19 +392,17 @@
|
||||
self.close_action(cr, uid, [ref("pos_add_product_0")], {"lang": "en_US", "active_model":
|
||||
"pos.order", "active_ids": [ref("pos_order_pos0")], "tz": False, "active_id": ref("pos_order_pos0"),
|
||||
})
|
||||
|
||||
-
|
||||
I create payment.
|
||||
-
|
||||
!record {model: pos.make.payment, id: pos_make_payment_1}:
|
||||
amount: 680.0
|
||||
journal: 7
|
||||
payment_date: 2010-05-13
|
||||
payment_date: "2010-05-13"
|
||||
payment_name: Payment
|
||||
product_id: product_product_hppaviliondesktoppcs0
|
||||
pricelist_id: product.list0
|
||||
partner_id: base.res_partner_agrolait
|
||||
|
||||
-
|
||||
For payment, I click on Make Payment.
|
||||
-
|
||||
@@ -452,7 +410,6 @@
|
||||
self.check(cr, uid, [ref("pos_make_payment_1")], {"lang": "en_US", "active_model":
|
||||
"pos.order", "active_ids": [ref("pos_order_pos0")], "tz":
|
||||
False, "active_id": ref("pos_order_pos0"), })
|
||||
|
||||
-
|
||||
To check the Return without Refund . I click button "Return without Refund ".
|
||||
-
|
||||
|
||||
@@ -36,8 +36,9 @@ def get_journal(self, cr, uid, context):
|
||||
|
||||
obj = self.pool.get('account.journal')
|
||||
statement_obj = self.pool.get('account.bank.statement')
|
||||
user = self.pool.get('res.users').browse(cr, uid, uid)
|
||||
ids = obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', user.company_id.id)])
|
||||
cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
|
||||
j_ids = map(lambda x1: x1[0], cr.fetchall())
|
||||
ids = obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)])
|
||||
obj_ids= statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)])
|
||||
res_obj = obj.read(cr, uid, ids, ['journal_id'], context)
|
||||
res_obj = [(r1['id'])for r1 in res_obj]
|
||||
|
||||
@@ -14,11 +14,13 @@
|
||||
<field name="journal_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="amount"/>
|
||||
<group colspan="4" col="2">
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="get_in" string="Take Money"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
<separator colspan="4"/>
|
||||
<group colspan="4" col="4">
|
||||
<group col="2" colspan="2"/>
|
||||
<button icon="gtk-stop" special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="get_in" string="Put Money"
|
||||
colspan="1" type="object" icon="terp-dolar_ok!" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -14,12 +14,14 @@
|
||||
<field name="journal_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="amount"/>
|
||||
<group colspan="4" col="2">
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="get_out" string="Put Money"
|
||||
colspan="1" type="object" icon="gtk-ok" />
|
||||
</group>
|
||||
<separator colspan="4"/>
|
||||
<group colspan="4" col="4">
|
||||
<group col="2" colspan="2"/>
|
||||
<button icon="gtk-stop" special="cancel"
|
||||
string="Cancel" />
|
||||
<button name="get_out" string="Take Money"
|
||||
colspan="1" type="object" icon="terp-dolar" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -43,28 +43,29 @@ class pos_close_statement(osv.osv_memory):
|
||||
cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
|
||||
j_ids = map(lambda x1: x1[0], cr.fetchall())
|
||||
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)])
|
||||
|
||||
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)])
|
||||
for journal in journal_obj.browse(cr, uid, journal_ids):
|
||||
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)])
|
||||
if not ids:
|
||||
raise osv.except_osv(_('Message'), _('Journals are already closed'))
|
||||
raise osv.except_osv(_('Message'), _('Registers are already closed.'))
|
||||
else:
|
||||
list_statement.append(ids[0])
|
||||
if not journal.check_dtls:
|
||||
statement_obj.button_confirm_cash(cr, uid, ids, context)
|
||||
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
id2 = data_obj._get_id(cr, uid, 'account', 'view_bank_statement_tree')
|
||||
id3 = data_obj._get_id(cr, uid, 'account', 'view_bank_statement_form2')
|
||||
result = data_obj._get_id(cr, uid, 'point_of_sale', 'view_pos_confirm_cash_statement_filter')
|
||||
search_id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
return {
|
||||
'domain': "[('id','in'," + str(list_statement) + ")]",
|
||||
'domain': "[('id','in'," + str(ids) + ")]",
|
||||
'name': 'Close Statements',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'search_view_id': search_id['res_id'],
|
||||
'res_model': 'account.bank.statement',
|
||||
'views': [(id2, 'tree'),(id3, 'form')],
|
||||
'type': 'ir.actions.act_window'
|
||||
|
||||
@@ -9,11 +9,15 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Close Statements">
|
||||
<separator string="Are you sure you want to close the statements ?" colspan="4"/>
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="No" colspan="1" />
|
||||
<button name="close_statement" string="Yes"
|
||||
colspan="1" type="object" icon="gtk-ok"/>
|
||||
<label string="Are you sure you want to close the statements ?"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<group col="2" colspan="2"/>
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="No" />
|
||||
<button name="close_statement" string="Yes"
|
||||
type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<group col="2" colspan="4">
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
<separator colspan="4"/>
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="print_report" string="Print Report"
|
||||
|
||||
@@ -49,7 +49,7 @@ class pos_open_statement(osv.osv_memory):
|
||||
for journal in journal_obj.browse(cr, uid, journal_ids):
|
||||
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)])
|
||||
if len(ids):
|
||||
raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s". \n Please close the cashbox related to. ' %(journal.name)))
|
||||
raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s".\nPlease close its related Register.' %(journal.name)))
|
||||
|
||||
statement_ids = sorted(statement_obj.search(cr, uid, [('state', '=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)]))
|
||||
if statement_ids:
|
||||
@@ -83,18 +83,22 @@ class pos_open_statement(osv.osv_memory):
|
||||
data_obj = self.pool.get('ir.model.data')
|
||||
id2 = data_obj._get_id(cr, uid, 'account', 'view_bank_statement_tree')
|
||||
id3 = data_obj._get_id(cr, uid, 'account', 'view_bank_statement_form2')
|
||||
result = data_obj._get_id(cr, uid, 'point_of_sale', 'view_pos_open_cash_statement_filter')
|
||||
search_id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
|
||||
if id2:
|
||||
id2 = data_obj.browse(cr, uid, id2, context=context).res_id
|
||||
if id3:
|
||||
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
|
||||
|
||||
return {
|
||||
'domain': "[('state','=','open')]",
|
||||
'domain': "[('state','=','open'),('user_id','=',"+ str(uid) +")]",
|
||||
'name': 'Open Statement',
|
||||
'view_type': 'form',
|
||||
'view_mode': 'tree,form',
|
||||
'search_view_id': search_id['res_id'],
|
||||
'res_model': 'account.bank.statement',
|
||||
'views': [(id2, 'tree'),(id3, 'form')],
|
||||
'context': {'search_default_open': 1},
|
||||
'type': 'ir.actions.act_window'
|
||||
}
|
||||
pos_open_statement()
|
||||
|
||||
@@ -9,11 +9,15 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Open Statements">
|
||||
<separator string="Are you sure you want to open the statements ?" colspan="4"/>
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="No" />
|
||||
<button name="open_statement" string="Yes"
|
||||
type="object" icon="gtk-ok"/>
|
||||
<label string="Are you sure you want to open the statements ?"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<group col="2" colspan="2"/>
|
||||
<button icon='gtk-stop' special="cancel"
|
||||
string="No" />
|
||||
<button name="open_statement" string="Yes"
|
||||
type="object" icon="gtk-ok"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -47,8 +47,9 @@ class pos_make_payment(osv.osv_memory):
|
||||
active_id = context and context.get('active_id',False)
|
||||
if active_id:
|
||||
j_obj = self.pool.get('account.journal')
|
||||
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
|
||||
journal = j_obj.search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', company_id)])
|
||||
cr.execute("""select DISTINCT journal_id from pos_journal_users where user_id=%d order by journal_id"""%(uid))
|
||||
j_ids = map(lambda x1: x1[0], cr.fetchall())
|
||||
journal = j_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)])
|
||||
|
||||
if journal:
|
||||
journal = journal[0]
|
||||
@@ -79,6 +80,10 @@ class pos_make_payment(osv.osv_memory):
|
||||
res.update({'payment_date':current_date})
|
||||
if 'payment_name' in fields:
|
||||
res.update({'payment_name':'Payment'})
|
||||
if 'partner_id' in fields:
|
||||
res.update({'partner_id': order.partner_id.id or False})
|
||||
if 'pricelist_id' in fields:
|
||||
res.update({'pricelist_id': order.pricelist_id.id or False})
|
||||
return res
|
||||
|
||||
def view_init(self, cr, uid, fields_list, context=None):
|
||||
@@ -123,6 +128,18 @@ class pos_make_payment(osv.osv_memory):
|
||||
"""
|
||||
return result
|
||||
|
||||
def onchange_product_id(self, cr, uid, ids, product_id, amount):
|
||||
""" Changes amount if product_id changes.
|
||||
@param product_id: Changed product_id
|
||||
@param amount: Amount to be paid
|
||||
@return: Dictionary of changed values
|
||||
"""
|
||||
prod_obj = self.pool.get('product.product')
|
||||
if product_id:
|
||||
product = prod_obj.browse(cr, uid, product_id)
|
||||
amount = amount - product.list_price
|
||||
return {'value': {'amount': amount}}
|
||||
|
||||
def check(self, cr, uid, ids, context):
|
||||
|
||||
"""Check the order:
|
||||
@@ -135,8 +152,12 @@ class pos_make_payment(osv.osv_memory):
|
||||
amount = order.amount_total - order.amount_paid
|
||||
data = self.read(cr, uid, ids)[0]
|
||||
invoice_wanted = data['invoice_wanted']
|
||||
is_accompte = data['is_acc']
|
||||
# Todo need to check ...
|
||||
|
||||
if is_accompte:
|
||||
line_id, price = order_obj.add_product(cr, uid, order.id, data['product_id'], -1.0, context)
|
||||
amount = order.amount_total - order.amount_paid - price
|
||||
|
||||
if amount != 0.0:
|
||||
order_obj.write(cr, uid, [active_id], {'invoice_wanted': invoice_wanted, 'partner_id': data['partner_id']})
|
||||
order_obj.add_payment(cr, uid, active_id, data, context=context)
|
||||
@@ -205,11 +226,11 @@ class pos_make_payment(osv.osv_memory):
|
||||
|
||||
_columns = {
|
||||
'journal':fields.selection(pos_box_entries.get_journal, "Cash Register",required=True),
|
||||
'product_id': fields.many2one('product.product', "Acompte"),
|
||||
'product_id': fields.many2one('product.product', "Advance"),
|
||||
'amount':fields.float('Amount', digits=(16,2) ,required= True),
|
||||
'payment_name': fields.char('Payment name', size=32, required=True),
|
||||
'payment_date': fields.date('Payment date', required=True),
|
||||
'is_acc': fields.boolean('Accompte'),
|
||||
'is_acc': fields.boolean('Advance'),
|
||||
'invoice_wanted': fields.boolean('Invoice'),
|
||||
'num_sale':fields.char('Num.File', size=32),
|
||||
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist'),
|
||||
|
||||
@@ -12,26 +12,28 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Add payment :">
|
||||
<group colspan="4" width="600" height="200">
|
||||
<group colspan="4" width="600" height="220">
|
||||
<field name="journal"/>
|
||||
<field name="amount" />
|
||||
<field name="payment_date" />
|
||||
<!--field name="payment_name" /-->
|
||||
<field name="invoice_wanted" />
|
||||
<field name="num_sale" />
|
||||
<field name="is_acc" />
|
||||
<field name="is_acc"/>
|
||||
<group attrs="{'invisible':[('is_acc','=',False)]}" colspan="4" col="2">
|
||||
<field name="product_id" attrs="{'required':[('is_acc', '=', True)]}" domain="[('type','=','service')]"/>
|
||||
<field name="product_id" attrs="{'required':[('is_acc', '=', True)]}" domain="[('type','=','service')]"
|
||||
on_change="onchange_product_id(product_id, amount)"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group attrs="{'invisible':[('invoice_wanted','=',False)]}" colspan="4">
|
||||
<field name="partner_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/>
|
||||
<field name="pricelist_id" attrs="{'required':[('invoice_wanted', '=', True)]}" colspan="2"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group col="2" colspan="4">
|
||||
<button icon='gtk-cancel' special="cancel" string="Cancel" />
|
||||
<button name="check" string="Make Payment" colspan="1" type="object" icon="gtk-ok"/>
|
||||
<separator colspan="4"/>
|
||||
<group col="4" colspan="4">
|
||||
<group col="2" colspan="2"/>
|
||||
<button icon='gtk-stop' special="cancel" string="Cancel" />
|
||||
<button name="check" string="Make Payment" colspan="1" type="object" icon="terp-dolar"/>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
|
||||
@@ -7,15 +7,21 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Sale by Date and User">
|
||||
<group col="2" colspan="4">
|
||||
<group col="4" colspan="4">
|
||||
<separator string="Dates" colspan="4"/>
|
||||
<field name="date_start"/>
|
||||
<field name="date_end"/>
|
||||
<field name="user_id"/>
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="print_report" string="Print Report"
|
||||
colspan="1" type="object" icon="gtk-print" />
|
||||
</group>
|
||||
<separator string="User" colspan="4"/>
|
||||
<field name="user_id" nolabel="1" colspan="4"/>
|
||||
<separator string="" colspan="4"/>
|
||||
<label string="" colspan="2"/>
|
||||
<group colspan="2" col="2">
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="print_report" string="Print Report"
|
||||
colspan="1" type="object" icon="gtk-print" />
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
<form string="Receipt :">
|
||||
<separator string="Print the receipt of the sale" colspan="4"/>
|
||||
<button icon='gtk-cancel' special="cancel"
|
||||
string="Close" />
|
||||
<button name="print_report" string="Print Report"
|
||||
string="Cancel" />
|
||||
<button name="print_report" string="Print Receipt"
|
||||
colspan="1" type="object" icon="gtk-print" />
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from mx import DateTime
|
||||
from osv import osv, fields
|
||||
from tools.translate import _
|
||||
import netsvc
|
||||
|
||||
@@ -91,7 +91,6 @@
|
||||
help="Procurement started late" />
|
||||
<filter icon="terp-gtk-go-back-rtl" string="To Fix" domain="[('state', '=', 'exception'),('message','=','')]" help="Procurement Orders with exceptions and without message"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="origin"/>
|
||||
<field name="product_id" />
|
||||
<field name="date_planned" widget="date"/>
|
||||
|
||||
@@ -421,7 +421,7 @@ msgid ""
|
||||
"reception of products."
|
||||
msgstr ""
|
||||
"Preço Padrão: o preço é fixo e recalculado periodicamente (geralmente no "
|
||||
"final do ano).\r\n"
|
||||
"final do ano).\n"
|
||||
"Preço Médio: o preço de custo é recalculado a cada recepção de produtos."
|
||||
|
||||
#. module: product
|
||||
|
||||
@@ -399,7 +399,7 @@ msgid ""
|
||||
"at the end of the year), Average Price: the cost price is recomputed at each "
|
||||
"reception of products."
|
||||
msgstr ""
|
||||
"标准价格: 成本价格是定期重新计算(通常在年底).\r\n"
|
||||
"标准价格: 成本价格是定期重新计算(通常在年底).\n"
|
||||
"平均价格: 成本价格是在每次接收产品时重新计算."
|
||||
|
||||
#. module: product
|
||||
@@ -557,7 +557,7 @@ msgid ""
|
||||
"and the reception of goods for this product and for the default supplier. It "
|
||||
"is used by the scheduler to order requests based on reordering delays."
|
||||
msgstr ""
|
||||
"产品供应在确认采购订单到接收产品之间的默认平均延迟. \r\n"
|
||||
"产品供应在确认采购订单到接收产品之间的默认平均延迟. \n"
|
||||
"用于在调度订单请求时要考虑的重订货延迟."
|
||||
|
||||
#. module: product
|
||||
@@ -671,7 +671,7 @@ msgid ""
|
||||
"supplying. 'Make to Order': When needed, purchase or produce for the "
|
||||
"procurement request."
|
||||
msgstr ""
|
||||
"按库存生产: 在仓库或等待重新供应时得到需求.\r\n"
|
||||
"按库存生产: 在仓库或等待重新供应时得到需求.\n"
|
||||
" 按订单生产: 在采购或产品获得请求时得到需求."
|
||||
|
||||
#. module: product
|
||||
@@ -1214,7 +1214,7 @@ msgid ""
|
||||
"The computed quantity will be a multiple of this value. Use 1.0 for products "
|
||||
"that can not be split."
|
||||
msgstr ""
|
||||
"这数量计算将乘于一个数值.\r\n"
|
||||
"这数量计算将乘于一个数值.\n"
|
||||
"产品使用1.0表示不能拆分."
|
||||
|
||||
#. module: product
|
||||
@@ -1444,7 +1444,7 @@ msgid ""
|
||||
"the delivery of the finished products. It's the time you promise to your "
|
||||
"customers."
|
||||
msgstr ""
|
||||
"这是确认客户订单和交付的平均时间.\r\n"
|
||||
"这是确认客户订单和交付的平均时间.\n"
|
||||
"是承诺客户的时间."
|
||||
|
||||
#. module: product
|
||||
@@ -1668,7 +1668,7 @@ msgid ""
|
||||
"reception of the products in your warehouse. Used by the scheduler for "
|
||||
"automatic computation of the purchase order planning."
|
||||
msgstr ""
|
||||
"延迟天数是确认采购订单到仓库接收产品之间的延迟天数.\r\n"
|
||||
"延迟天数是确认采购订单到仓库接收产品之间的延迟天数.\n"
|
||||
"用于制定采购订单计划时调度程序自动计算."
|
||||
|
||||
#. module: product
|
||||
|
||||
@@ -21,13 +21,10 @@
|
||||
|
||||
from osv import osv, fields
|
||||
import decimal_precision as dp
|
||||
import pooler
|
||||
|
||||
import math
|
||||
import logging
|
||||
from _common import rounding
|
||||
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
|
||||
def is_pair(x):
|
||||
|
||||
+25
-21
@@ -22,12 +22,14 @@
|
||||
from lxml import etree
|
||||
import time
|
||||
from datetime import datetime, date
|
||||
from operator import itemgetter
|
||||
from itertools import groupby
|
||||
|
||||
from tools.misc import flatten
|
||||
from tools.translate import _
|
||||
from osv import fields, osv
|
||||
from tools import email_send as email
|
||||
|
||||
from operator import itemgetter
|
||||
|
||||
class project_task_type(osv.osv):
|
||||
_name = 'project.task.type'
|
||||
@@ -77,20 +79,6 @@ class project(osv.osv):
|
||||
pricelist_id = pricelist.get('property_product_pricelist', False) and pricelist.get('property_product_pricelist')[0] or False
|
||||
return {'value':{'contact_id': addr['contact'], 'pricelist_id': pricelist_id}}
|
||||
|
||||
def get_all_child_projects(self, cr, uid, ids, context=None):
|
||||
# Calculate child project for Given project id => For progress rate + planned time + Time spent
|
||||
cr.execute('''SELECT prpc.id AS id from account_analytic_account AS p
|
||||
JOIN account_analytic_account AS c ON p.id = c.parent_id
|
||||
JOIN project_project AS prp ON prp.analytic_account_id = p.id
|
||||
JOIN project_project AS prpc ON prpc.analytic_account_id = c.id
|
||||
WHERE prp.id IN %s''',(tuple(ids),))
|
||||
|
||||
child_ids = cr.fetchall()
|
||||
if child_ids:
|
||||
child_ids = [x[0] for x in child_ids]
|
||||
child_ids = self.get_all_child_projects(cr, uid, child_ids)
|
||||
return ids + child_ids
|
||||
|
||||
def _get_user_and_default_uom_ids(self, cr, uid):
|
||||
users_obj = self.pool.get('res.users')
|
||||
model_data_obj = self.pool.get('ir.model.data')
|
||||
@@ -102,17 +90,33 @@ class project(osv.osv):
|
||||
return user_uom, default_uom
|
||||
|
||||
def _progress_rate(self, cr, uid, ids, names, arg, context=None):
|
||||
def _get_all_child_projects(ids):
|
||||
"""Recursively get child project ids"""
|
||||
child_ids = flatten([project_hierarchy.get(idn, []) for idn in ids])
|
||||
if child_ids:
|
||||
child_ids = _get_all_child_projects(child_ids)
|
||||
return ids + child_ids
|
||||
# END _get_all_child_projects
|
||||
|
||||
res = {}.fromkeys(ids, 0.0)
|
||||
progress = {}
|
||||
if not ids:
|
||||
return res
|
||||
|
||||
par_child_projects={}
|
||||
par_child_projects = {}
|
||||
all_projects = list(ids)
|
||||
|
||||
# get project hierarchy:
|
||||
cr.execute('''SELECT prp.id AS pr_parent_id, prpc.id AS pr_child_id
|
||||
FROM account_analytic_account AS p
|
||||
JOIN account_analytic_account AS c ON p.id = c.parent_id
|
||||
JOIN project_project AS prp ON prp.analytic_account_id = p.id
|
||||
JOIN project_project AS prpc ON prpc.analytic_account_id = c.id''')
|
||||
|
||||
project_hierarchy = dict((k, list(set([v[1] for v in itr]))) for k, itr in groupby(cr.fetchall(), itemgetter(0)))
|
||||
|
||||
for id in ids:
|
||||
child_projects = self.get_all_child_projects(cr, uid, [id], context)
|
||||
child_projects = [x for x in child_projects]
|
||||
child_projects = _get_all_child_projects([id])
|
||||
par_child_projects[id] = child_projects
|
||||
all_projects.extend(child_projects)
|
||||
|
||||
@@ -128,6 +132,7 @@ class project(osv.osv):
|
||||
project_id''',(tuple(all_projects),))
|
||||
progress = dict(map(lambda x: (x[0], (x[1], x[2], x[3])), cr.fetchall()))
|
||||
|
||||
user_uom, def_uom = self._get_user_and_default_uom_ids(cr, uid)
|
||||
for project in self.browse(cr, uid, par_child_projects.keys(), context=context):
|
||||
s = [0.0, 0.0, 0.0]
|
||||
tocompute = par_child_projects[project.id]
|
||||
@@ -137,7 +142,6 @@ class project(osv.osv):
|
||||
s[i] += progress.get(p, (0.0, 0.0, 0.0))[i]
|
||||
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
user_uom, def_uom = self._get_user_and_default_uom_ids(cr, uid)
|
||||
if user_uom != def_uom:
|
||||
s[0] = uom_obj._compute_qty(cr, uid, user_uom, s[0], def_uom)
|
||||
s[1] = uom_obj._compute_qty(cr, uid, user_uom, s[1], def_uom)
|
||||
@@ -426,7 +430,7 @@ class task(osv.osv):
|
||||
'parent_ids': fields.many2many('project.task', 'project_task_parent_rel', 'task_id', 'parent_id', 'Parent Tasks'),
|
||||
'child_ids': fields.many2many('project.task', 'project_task_parent_rel', 'parent_id', 'task_id', 'Delegated Tasks'),
|
||||
'notes': fields.text('Notes'),
|
||||
'planned_hours': fields.float('Planned Hours', required=True, help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
|
||||
'planned_hours': fields.float('Planned Hours', help='Estimated time to do the task, usually set by the project manager when the task is in draft state.'),
|
||||
'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', store=True, help="Computed using the sum of the task work done."),
|
||||
'remaining_hours': fields.float('Remaining Hours', digits=(16,2), help="Total remaining time, can be re-estimated periodically by the assignee of the task."),
|
||||
'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', store=True, help="Computed as: Time Spent + Remaining Time."),
|
||||
@@ -466,7 +470,7 @@ class task(osv.osv):
|
||||
cr.execute('SELECT DISTINCT task_id '\
|
||||
'FROM project_task_parent_rel '\
|
||||
'WHERE parent_id IN %s', (tuple(ids),))
|
||||
child_ids = map(itemgetter(0), cr.fetchall())
|
||||
child_ids = map(lambda x: x[0], cr.fetchall())
|
||||
c_ids = child_ids
|
||||
if (list(set(parent_ids).intersection(set(c_ids)))) or (obj_task.id in c_ids):
|
||||
return False
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<field name="type">form</field>
|
||||
<field name="inherit_id" ref="product.product_normal_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="company_id" position="after">
|
||||
<field name="active" position="after">
|
||||
<field name="project_id" attrs="{'readonly':[('type','!=','service')]}" />
|
||||
</field>
|
||||
</field>
|
||||
|
||||
@@ -18,9 +18,13 @@
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="20" groups="base.group_extended">
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'resource_type'}"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}"/>
|
||||
<filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'resource_type'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical" groups="base.group_multi_company"/>
|
||||
<filter string="Working Time" icon="terp-go-today" domain="[]" context="{'group_by':'calendar_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -53,16 +57,17 @@
|
||||
<search string="Search Working Period Leaves">
|
||||
<group col='15' colspan='4'>
|
||||
<field name="name" string="Name"/>
|
||||
<field name="company_id" string="Company" widget="selection" />
|
||||
<field name="calendar_id" string="Working Time" widget="selection"/>
|
||||
<field name="resource_id" string="Resource"/>
|
||||
<field name="company_id" string="Company" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="calendar_id" string="Working Time" widget="selection"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="4" col="20">
|
||||
<filter string="Resource" icon="terp-personal" domain="[]" context="{'group_by':'resource_id'}"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_from'}"/>
|
||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator orientation="vertical" groups="base.group_multi_company"/>
|
||||
<filter string="Date" icon="terp-go-month" domain="[]" context="{'group_by':'date_from'}" help="Starting Date of Leave"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -74,9 +79,11 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Working Period">
|
||||
<field name="name" select="1"/>
|
||||
<field name="manager" select="1"/>
|
||||
<field name="company_id" select="1" groups="base.group_multi_company"/>
|
||||
<field name="name"/>
|
||||
<field name="manager"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<separator string="" colspan="4"/>
|
||||
<field name="attendance_ids" colspan="4" nolabel="1"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
@@ -196,7 +203,7 @@
|
||||
<field name="name">Resources</field>
|
||||
<field name="res_model">resource.resource</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{"search_default_user_id":uid}</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="search_view_id" ref="view_resource_resource_search"/>
|
||||
<field name="help">There you can find clusters of your resources type involved in a specific project phase as well as their workload.</field>
|
||||
</record>
|
||||
@@ -210,7 +217,7 @@
|
||||
<field name="name"/>
|
||||
<field name="resource_id" on_change="onchange_resource(resource_id)"/>
|
||||
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
|
||||
<field name="calendar_id"/>
|
||||
<field name="calendar_id" widget="selection"/>
|
||||
<newline/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_to"/>
|
||||
@@ -224,11 +231,11 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Leave Detail">
|
||||
<field name="name" />
|
||||
<field name="resource_id" />
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="calendar_id" />
|
||||
<field name="date_from" />
|
||||
<field name="date_to" />
|
||||
<field name="resource_id" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -81,7 +81,6 @@ class crm_make_sale(osv.osv_memory):
|
||||
sale_line_obj = self.pool.get('sale.order.line')
|
||||
|
||||
result = mod_obj._get_id(cr, uid, 'sale', 'view_sales_order_filter')
|
||||
id = mod_obj.read(cr, uid, result, ['res_id'])
|
||||
|
||||
data = context and context.get('active_ids', []) or []
|
||||
|
||||
|
||||
@@ -2013,7 +2013,7 @@ msgid ""
|
||||
"This stock location will be used, instead of the default one, as the "
|
||||
"destination location for goods you send to this partner"
|
||||
msgstr ""
|
||||
"Koristiće se ova lokacija zaliha, umjesto podrazumjevane, kao \r\n"
|
||||
"Koristiće se ova lokacija zaliha, umjesto podrazumjevane, kao \n"
|
||||
"odredišna lokacija za robu koju šaljete ovom partneru"
|
||||
|
||||
#. module: stock
|
||||
@@ -2151,8 +2151,8 @@ msgid ""
|
||||
"instead of the default one, as the source location for stock moves generated "
|
||||
"by production orders"
|
||||
msgstr ""
|
||||
"Za ovaj proizvod (šablon) biće korištena ova lokacija zaliha, \r\n"
|
||||
"umjesto podrazumjevane, kao izvorna lokacija za premještanja zaliha \r\n"
|
||||
"Za ovaj proizvod (šablon) biće korištena ova lokacija zaliha, \n"
|
||||
"umjesto podrazumjevane, kao izvorna lokacija za premještanja zaliha \n"
|
||||
"kada ga inicira nalog za proizvodnju"
|
||||
|
||||
#. module: stock
|
||||
@@ -2238,7 +2238,7 @@ msgid ""
|
||||
"by procurements"
|
||||
msgstr ""
|
||||
"Za ovaj proizvod (šablon) biće korištena ova lokacija zaliha, umjesto "
|
||||
"podrazumjevane, kao izvorna lokacija za premještanja zaliha \r\n"
|
||||
"podrazumjevane, kao izvorna lokacija za premještanja zaliha \n"
|
||||
"kada ga inicira nabavka"
|
||||
|
||||
#. module: stock
|
||||
|
||||
@@ -67,7 +67,6 @@ class product_product(osv.osv):
|
||||
stock_output_acc = datas.get('stock_output_account', False)
|
||||
stock_input_acc = datas.get('stock_input_account', False)
|
||||
journal_id = datas.get('stock_journal', False)
|
||||
property_obj=self.pool.get('ir.property')
|
||||
product_obj=self.browse(cr,uid,ids)[0]
|
||||
account_variation = product_obj.categ_id.property_stock_variation
|
||||
account_variation_id = account_variation and account_variation.id or False
|
||||
|
||||
+1
-22
@@ -23,7 +23,6 @@ from dateutil.relativedelta import relativedelta
|
||||
import time
|
||||
|
||||
from osv import fields, osv
|
||||
from tools import config
|
||||
from tools.translate import _
|
||||
import netsvc
|
||||
import tools
|
||||
@@ -856,7 +855,6 @@ class stock_picking(osv.osv):
|
||||
""" Gets payment term from partner.
|
||||
@return: Payment term
|
||||
"""
|
||||
partner_obj = self.pool.get('res.partner')
|
||||
partner = picking.address_id.partner_id
|
||||
return partner.property_payment_term and partner.property_payment_term.id or False
|
||||
|
||||
@@ -1132,12 +1130,8 @@ class stock_picking(osv.osv):
|
||||
price_type_obj = self.pool.get('product.price.type')
|
||||
sequence_obj = self.pool.get('ir.sequence')
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
partner_id = partial_datas.get('partner_id', False)
|
||||
address_id = partial_datas.get('address_id', False)
|
||||
delivery_date = partial_datas.get('delivery_date', False)
|
||||
for pick in self.browse(cr, uid, ids, context=context):
|
||||
new_picking = None
|
||||
new_moves = []
|
||||
complete, too_many, too_few = [], [], []
|
||||
move_product_qty = {}
|
||||
for move in pick.move_lines:
|
||||
@@ -1197,7 +1191,7 @@ class stock_picking(osv.osv):
|
||||
})
|
||||
if product_qty != 0:
|
||||
|
||||
new_obj = move_obj.copy(cr, uid, move.id,
|
||||
move_obj.copy(cr, uid, move.id,
|
||||
{
|
||||
'product_qty' : product_qty,
|
||||
'product_uos_qty': product_qty, #TODO: put correct uos_qty
|
||||
@@ -1682,7 +1676,6 @@ class stock_move(osv.osv):
|
||||
"""
|
||||
moves = self.browse(cr, uid, ids)
|
||||
self.write(cr, uid, ids, {'state': 'confirmed'})
|
||||
i = 0
|
||||
|
||||
def create_chained_picking(self, cr, uid, moves, context=None):
|
||||
new_moves = []
|
||||
@@ -1815,7 +1808,6 @@ class stock_move(osv.osv):
|
||||
|
||||
def setlast_tracking(self, cr, uid, ids, context=None):
|
||||
tracking_obj = self.pool.get('stock.tracking')
|
||||
tracking = context.get('tracking', False)
|
||||
picking = self.browse(cr, uid, ids)[0].picking_id
|
||||
if picking:
|
||||
last_track = [line.tracking_id.id for line in picking.move_lines if line.tracking_id]
|
||||
@@ -1895,7 +1887,6 @@ class stock_move(osv.osv):
|
||||
amount = q * move.price_unit
|
||||
# Base computation on valuation price type
|
||||
else:
|
||||
company_id = move.company_id.id
|
||||
context['currency_id'] = move.company_id.currency_id.id
|
||||
pricetype = price_type_obj.browse(cr,uid,move.company_id.property_valuation_price_type.id)
|
||||
amount_unit = move.product_id.price_get(pricetype.field, context)[move.product_id.id]
|
||||
@@ -1906,11 +1897,7 @@ class stock_move(osv.osv):
|
||||
""" Makes the move done and if all moves are done, it will finish the picking.
|
||||
@return:
|
||||
"""
|
||||
track_flag = False
|
||||
picking_ids = []
|
||||
product_uom_obj = self.pool.get('product.uom')
|
||||
price_type_obj = self.pool.get('product.price.type')
|
||||
product_obj = self.pool.get('product.product')
|
||||
move_obj = self.pool.get('account.move')
|
||||
if context is None:
|
||||
context = {}
|
||||
@@ -2205,12 +2192,7 @@ class stock_move(osv.osv):
|
||||
users_obj = self.pool.get('res.users')
|
||||
uom_obj = self.pool.get('product.uom')
|
||||
price_type_obj = self.pool.get('product.price.type')
|
||||
sequence_obj = self.pool.get('ir.sequence')
|
||||
wf_service = netsvc.LocalService("workflow")
|
||||
partner_id = partial_datas.get('partner_id', False)
|
||||
address_id = partial_datas.get('address_id', False)
|
||||
delivery_date = partial_datas.get('delivery_date', False)
|
||||
new_moves = []
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
@@ -2303,7 +2285,6 @@ class stock_move(osv.osv):
|
||||
picking_obj.action_move(cr, uid, [move.picking_id.id])
|
||||
wf_service.trg_validate(uid, 'stock.picking', move.picking_id.id, 'button_done', cr)
|
||||
|
||||
ref = {}
|
||||
done_move_ids = []
|
||||
for move in complete:
|
||||
done_move_ids.append(move.id)
|
||||
@@ -2345,7 +2326,6 @@ class stock_inventory(osv.osv):
|
||||
context = {}
|
||||
for inv in self.browse(cr, uid, ids):
|
||||
move_ids = []
|
||||
move_line = []
|
||||
for line in inv.inventory_line_id:
|
||||
pid = line.product_id.id
|
||||
|
||||
@@ -2495,7 +2475,6 @@ class stock_picking_move_wizard(osv.osv_memory):
|
||||
def action_move(self, cr, uid, ids, context=None):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
picking_obj = self.pool.get('stock.picking')
|
||||
account_move_obj = self.pool.get('account.move')
|
||||
for act in self.read(cr, uid, ids):
|
||||
move_lines = move_obj.browse(cr, uid, act['move_ids'])
|
||||
for line in move_lines:
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
##############################################################################
|
||||
|
||||
from osv import fields, osv
|
||||
from tools.translate import _
|
||||
|
||||
class stock_move_track(osv.osv_memory):
|
||||
_name = "stock.move.track"
|
||||
@@ -220,7 +219,6 @@ class split_in_production_lot(osv.osv_memory):
|
||||
@return:
|
||||
"""
|
||||
prodlot_obj = self.pool.get('stock.production.lot')
|
||||
ir_sequence_obj = self.pool.get('ir.sequence')
|
||||
move_obj = self.pool.get('stock.move')
|
||||
new_move = []
|
||||
for data in self.browse(cr, uid, ids):
|
||||
|
||||
@@ -36,7 +36,6 @@ class stock_partial_move(osv.osv_memory):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
if not context:
|
||||
context={}
|
||||
moveids = []
|
||||
for m in move_obj.browse(cr, uid, context.get('active_ids', [])):
|
||||
if m.state in ('done', 'cancel'):
|
||||
raise osv.except_osv(_('Invalid action !'), _('Cannot delivery products which are already delivered !'))
|
||||
@@ -63,7 +62,7 @@ class stock_partial_move(osv.osv_memory):
|
||||
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="2"/>
|
||||
<field name="date" colspan="2"/>
|
||||
<separator colspan="4" string="Move Detail"/>
|
||||
"""
|
||||
_moves_fields = result['fields']
|
||||
@@ -147,7 +146,6 @@ class stock_partial_move(osv.osv_memory):
|
||||
move_obj = self.pool.get('stock.move')
|
||||
if not context:
|
||||
context={}
|
||||
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', [])
|
||||
@@ -203,7 +201,6 @@ class stock_partial_move(osv.osv_memory):
|
||||
@return: A dictionary which of fields with values.
|
||||
"""
|
||||
|
||||
rec_id = context and context.get('active_id', False)
|
||||
move_obj = self.pool.get('stock.move')
|
||||
move_ids = context.get('active_ids', False)
|
||||
partial = self.browse(cr, uid, ids[0], context)
|
||||
@@ -224,7 +221,7 @@ class stock_partial_move(osv.osv_memory):
|
||||
'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)
|
||||
move_obj.do_partial(cr, uid, move_ids, partial_datas, context=context)
|
||||
return {}
|
||||
|
||||
stock_partial_move()
|
||||
|
||||
@@ -75,7 +75,7 @@ class stock_return_picking(osv.osv_memory):
|
||||
self._columns['return%s'%(m.id)] = fields.float(string=m.name, required=True)
|
||||
if 'invoice_state' not in self._columns:
|
||||
self._columns['invoice_state'] = fields.selection([('2binvoiced', 'To be Invoiced'), ('none', 'None')], string='Invoice State', required=True)
|
||||
except Exception, e:
|
||||
except Exception:
|
||||
return res
|
||||
return res
|
||||
|
||||
@@ -117,10 +117,6 @@ class stock_return_picking(osv.osv_memory):
|
||||
raise osv.except_osv(_('Warning!'),_('There is no product to return!'))
|
||||
|
||||
arch_lst.append('<field name="invoice_state"/>\n<newline/>')
|
||||
if pick.invoice_state=='invoiced':
|
||||
new_invoice_state='2binvoiced'
|
||||
else:
|
||||
new_invoice_state=pick.invoice_state
|
||||
res['fields']['invoice_state']={'string':_('Invoice state'), 'type':'selection','required':True, 'selection':[('2binvoiced', _('To Be Invoiced')), ('none', _('None'))]}
|
||||
arch_lst.append('<group col="2" colspan="4">')
|
||||
arch_lst.append('<button icon="gtk-cancel" special="cancel" string="Cancel" />')
|
||||
|
||||
@@ -69,7 +69,7 @@ class stock_split_into(osv.osv_memory):
|
||||
'state': move.state,
|
||||
'product_uos': move.product_uom.id
|
||||
}
|
||||
current_move = move_obj.copy(cr, uid, move.id, default_val)
|
||||
move_obj.copy(cr, uid, move.id, default_val)
|
||||
return {}
|
||||
stock_split_into()
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ from tools import config
|
||||
|
||||
import base64
|
||||
import addons
|
||||
import difflib
|
||||
|
||||
class thunderbird_installer(osv.osv_memory):
|
||||
_name = 'thunderbird.installer'
|
||||
@@ -32,8 +33,7 @@ class thunderbird_installer(osv.osv_memory):
|
||||
|
||||
def default_get(self, cr, uid, fields, context={}):
|
||||
data = super(thunderbird_installer, self).default_get(cr, uid, fields, context)
|
||||
pdf_file = open(addons.get_module_resource('thunderbird','doc', 'Installation Guide to OpenERP Thunderbid Plug-in.pdf'),'rb')
|
||||
data['pdf_file'] = base64.encodestring(pdf_file.read())
|
||||
data['pdf_file'] = 'http://doc.openerp.com/book/2/2_6_Comms/2_6_Comms_thunderbird.html'
|
||||
file = open(addons.get_module_resource('thunderbird','plugin', 'openerp_plugin.xpi'),'rb')
|
||||
data['plugin_file'] = base64.encodestring(file.read())
|
||||
return data
|
||||
@@ -43,14 +43,13 @@ class thunderbird_installer(osv.osv_memory):
|
||||
'pdf_name':fields.char('File name', size=64),
|
||||
'thunderbird':fields.boolean('Thunderbird Plug-in', help="Allows you to select an object that you’d like to add to your email and its attachments."),
|
||||
'plugin_file':fields.binary('Thunderbird Plug-in', readonly=True, help="Thunderbird plug-in file. Save as this file and install this plug-in in thunderbird."),
|
||||
'pdf_file':fields.binary('Installation Manual', help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True),
|
||||
'pdf_file':fields.char('Installation Manual', size="264", help="The documentation file :- how to install Thunderbird Plug-in.", readonly=True),
|
||||
'description':fields.text('Description', readonly=True)
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'thunderbird' : True,
|
||||
'name' : 'openerp_plugin.xpi',
|
||||
'pdf_name' : 'Installation Guide to OpenERP Thunderbid Plug-in.pdf',
|
||||
'description' : """
|
||||
* Save the Thunderbird plug-in.
|
||||
* Follow these steps to install Thunderbird plug-in.
|
||||
|
||||
@@ -30,7 +30,7 @@ import tools
|
||||
import binascii
|
||||
class email_server_tools(osv.osv_memory):
|
||||
_inherit = "email.server.tools"
|
||||
def history_message(self, cr, uid, model, res_id, message):
|
||||
def history_message(self, cr, uid, model, res_id, message, context=None):
|
||||
#@param message: string of mail which is read from EML File
|
||||
attachment_pool = self.pool.get('ir.attachment')
|
||||
msg = self.parse_message(message)
|
||||
@@ -49,15 +49,15 @@ class email_server_tools(osv.osv_memory):
|
||||
return self.history(cr, uid, model, res_id, msg, att_ids)
|
||||
|
||||
def parse_message(self, message):
|
||||
#TOCHECK: put this function in mailgateway
|
||||
#TOCHECK: put this function in mailgateway module
|
||||
if isinstance(message, unicode):
|
||||
message = message.encode('utf-8')
|
||||
msg_txt = email.message_from_string(message)
|
||||
message_id = msg_txt.get('message-id', False)
|
||||
msg = {}
|
||||
msg_txt = email.message_from_string(message)
|
||||
fields = msg_txt.keys()
|
||||
msg['id'] = message_id
|
||||
msg['message-id'] = message_id
|
||||
|
||||
if 'Subject' in fields:
|
||||
msg['subject'] = self._decode_header(msg_txt.get('Subject'))
|
||||
|
||||
@@ -152,67 +152,79 @@ class thunderbird_partner(osv.osv_memory):
|
||||
dictcreate = dict(vals)
|
||||
ref_ids = str(dictcreate.get('ref_ids')).split(';')
|
||||
msg = dictcreate.get('message')
|
||||
msg = self.pool.get('email.server.tools').parse_message(msg)
|
||||
server_tools_pool = self.pool.get('email.server.tools')
|
||||
message_id = msg.get('message-id', False)
|
||||
msg_pool = self.pool.get('mailgate.message')
|
||||
msg_ids = []
|
||||
res = {}
|
||||
res_ids = []
|
||||
if message_id:
|
||||
msg_ids = msg_pool.search(cr, uid, [('message_id','=',message_id)])
|
||||
if msg_ids and len(msg_ids): return 0
|
||||
for ref_id in ref_ids:
|
||||
msg_new = dictcreate.get('message')
|
||||
ref = ref_id.split(',')
|
||||
model = ref[0]
|
||||
res_id = int(ref[1])
|
||||
server_tools_pool.history_message(cr, uid, model, res_id, msg)
|
||||
return True
|
||||
if message_id:
|
||||
msg_ids = msg_pool.search(cr, uid, [('message_id','=',message_id),('res_id','=',res_id),('model','=',model)])
|
||||
if msg_ids and len(msg_ids):
|
||||
continue
|
||||
server_tools_pool.history_message(cr, uid, model, res_id, msg_new)
|
||||
res_ids.append(res_id)
|
||||
return len(res_ids)
|
||||
|
||||
def process_email(self,cr,uid,vals):
|
||||
def process_email(self, cr, uid, vals):
|
||||
dictcreate = dict(vals)
|
||||
model = str(dictcreate.get('model'))
|
||||
message = dictcreate.get('message')
|
||||
return self.pool.get('email.server.tools').process_email(cr, uid, model, message, attach=True, context=None)
|
||||
|
||||
def search_contact(self, cr, user, vals):
|
||||
address_obj = self.pool.get('res.partner.address')
|
||||
partner = address_obj.search(cr, user,[('email','=',vals)])
|
||||
def search_contact(self, cr, user, email):
|
||||
address_pool = self.pool.get('res.partner.address')
|
||||
address_ids = address_pool.search(cr, user, [('email','=',email)])
|
||||
res = {}
|
||||
res1 = {}
|
||||
|
||||
if not partner:
|
||||
res1 = {
|
||||
'email': '',
|
||||
}
|
||||
return res1.items()
|
||||
|
||||
if partner:
|
||||
partner=partner[0]
|
||||
data = address_obj.read(cr,user, partner)
|
||||
if not address_ids:
|
||||
res = {
|
||||
'partner_name': data['partner_id'] and data['partner_id'][1] or '',
|
||||
'contactname': data['name'] or '',
|
||||
'street': data['street'] or '',
|
||||
'street2': data['street2'] or '',
|
||||
'zip': data['zip'] or '',
|
||||
'city': data['city'] or '',
|
||||
'country': data['country_id'] and data['country_id'][1] or '',
|
||||
'state': data['state_id'] and data['state_id'][1] or '',
|
||||
'email': data['email'] or '',
|
||||
'phone': data['phone'] or '',
|
||||
'mobile': data['mobile'] or '',
|
||||
'fax': data['fax'] or '',
|
||||
'res_id': str(partner),
|
||||
'email': '',
|
||||
}
|
||||
else:
|
||||
address_id = address_ids[0]
|
||||
address = address_pool.browse(cr, user, address_id)
|
||||
res = {
|
||||
'partner_name': address.partner_id and address.partner_id.name or '',
|
||||
'contactname': address.name,
|
||||
'street': address.street or '',
|
||||
'street2': address.street2 or '',
|
||||
'zip': address.zip or '',
|
||||
'city': address.city or '',
|
||||
'country': address.country_id and address.country_id.name or '',
|
||||
'state': address.state_id and address.state_id.name or '',
|
||||
'email': address.email or '',
|
||||
'phone': address.phone or '',
|
||||
'mobile': address.mobile or '',
|
||||
'fax': address.fax or '',
|
||||
'partner_id': address.partner_id and str(address.partner_id.id) or '',
|
||||
'res_id': str(address.id),
|
||||
}
|
||||
return res.items()
|
||||
|
||||
def update_contact(self,cr,user,vals):
|
||||
def update_contact(self, cr, user, vals):
|
||||
dictcreate = dict(vals)
|
||||
res_id = dictcreate.get('res_id',False)
|
||||
result={}
|
||||
|
||||
if not (dictcreate.get('partner_id')):
|
||||
result = {}
|
||||
address_pool = self.pool.get('res.partner.address')
|
||||
if not (dictcreate.get('partner_id')): # TOCHECK: It should be check res_id or not
|
||||
dictcreate.update({'partner_id': False})
|
||||
create_id = self.pool.get('res.partner.address').create(cr, user, dictcreate)
|
||||
create_id = address_pool.create(cr, user, dictcreate)
|
||||
return create_id
|
||||
|
||||
if res_id:
|
||||
address_obj = self.pool.get('res.partner.address')
|
||||
address_data = address_obj.read(cr, user, int(res_id), [])
|
||||
address_data = address_pool.read(cr, user, int(res_id), [])
|
||||
result = {
|
||||
'partner_id': address_data['partner_id'] and address_data['partner_id'][0] or False,
|
||||
'partner_id': address_data['partner_id'] and address_data['partner_id'][0] or False, #TOFIX: parter_id should take from address_data
|
||||
'country_id': dictcreate['country_id'] and int(dictcreate['country_id'][0]) or False,
|
||||
'state_id': dictcreate['state_id'] and int(dictcreate['state_id'][0]) or False,
|
||||
'name': dictcreate['name'],
|
||||
@@ -225,7 +237,7 @@ class thunderbird_partner(osv.osv_memory):
|
||||
'mobile': dictcreate['mobile'],
|
||||
'email': dictcreate['email'],
|
||||
}
|
||||
address_obj.write(cr, user,int(res_id),result )
|
||||
address_pool.write(cr, user, int(res_id), result )
|
||||
return True
|
||||
|
||||
def create_partner(self,cr,user,vals):
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -26,7 +26,6 @@
|
||||
<textbox id="txtselectpartner" align="right" width="270" readonly="true"/>
|
||||
<spacer width="5"/>
|
||||
<button label="New Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);" width="133"/>
|
||||
<button label="Search Partner" image="&imagesearch.value;" oncommand="Select.onMenuItemCommand(event);getPartnerList();" width="128"/>
|
||||
</hbox>
|
||||
<separator class="groove-thin" orient="horizontal" width="94"/>
|
||||
</groupbox>
|
||||
|
||||
+1
-1
@@ -24,7 +24,7 @@
|
||||
|
||||
</groupbox>
|
||||
<hbox align="right">
|
||||
<button label="Cancel" image="&imagecancel.value;" oncommand="config_close();" />
|
||||
<button label="Close" image="&imagecancel.value;" oncommand="config_close();" />
|
||||
<button label="OK" image="&imageok.value;" oncommand="config_ok()"/>
|
||||
</hbox>
|
||||
|
||||
|
||||
@@ -14,8 +14,9 @@
|
||||
<separator class="groove-thin" orient="horizontal" width="94"/>
|
||||
<hbox>
|
||||
<label align="right" id="partner" value="&selectpartner.value;" width="97" />
|
||||
<textbox id="txtselectpartner" readonly="true" value="" width="270"/>
|
||||
<button label="&bsearch.label;" oncommand="Select.onMenuItemCommand(event);" image="&imagesearch.value;"/>
|
||||
<textbox id="txtselectpartner" readonly="true" value="" width="270"/>
|
||||
<button label="&bsearch.label;" oncommand="Select.onMenuItemCommand(event);" image="&imagesearch.value;"/>
|
||||
<button label="Create Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);"/>
|
||||
</hbox>
|
||||
<hbox>
|
||||
<label align="right" id="name" value="&name.value;" width="80" />
|
||||
|
||||
@@ -33,6 +33,7 @@ function selectPartner(){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//function for the intialization procedure //used while loading and unloading of the window
|
||||
var myPrefObserver =
|
||||
{
|
||||
|
||||
+255
-68
@@ -10,9 +10,9 @@ var MBstrBundleService = Components.classes["@mozilla.org/intl/stringbundle;1"].
|
||||
var mboximportbundle = MBstrBundleService.createBundle("chrome://mboximport/locale/mboximport.properties");
|
||||
//function to get the required details of the selected email
|
||||
|
||||
function searchmail()
|
||||
{
|
||||
setTimeout("createConnection()",5000)
|
||||
function check()
|
||||
{
|
||||
setTimeout("createConnection()",5000)
|
||||
if (getconnect_server() == "false")
|
||||
{
|
||||
alert("Please Login To The Database First !")
|
||||
@@ -24,7 +24,20 @@ function searchmail()
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
return false
|
||||
}
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
||||
if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){
|
||||
alert("You must select only one mail to archive");
|
||||
return false
|
||||
}
|
||||
return true
|
||||
|
||||
}
|
||||
|
||||
function searchmail()
|
||||
{
|
||||
if (check() == false){
|
||||
return true
|
||||
}
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
||||
var version_obj = prefService.getBranch("extensions.");
|
||||
version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
version = version_obj.getCharPref("lastAppVersion");
|
||||
@@ -45,11 +58,7 @@ function searchmail()
|
||||
IETexported = 0;
|
||||
var msguri = emlsArray[0];
|
||||
|
||||
if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){
|
||||
alert("You must select only one mail to archive");
|
||||
return false
|
||||
}
|
||||
|
||||
|
||||
//gives the selected email uri
|
||||
var messageUri= gDBView.URIForFirstSelectedMessage;
|
||||
|
||||
@@ -83,10 +92,10 @@ function searchmail()
|
||||
sendername = message.author;
|
||||
}
|
||||
if(message.author.indexOf('<')!=-1){
|
||||
senderemail = message.author.split('<')[1].split('>')[0];
|
||||
senderemail = message.author.split('<')[1].split('>')[0];
|
||||
}
|
||||
else{
|
||||
senderemail = message.author
|
||||
senderemail = message.author
|
||||
}
|
||||
|
||||
//gives the receiver email address
|
||||
@@ -157,46 +166,106 @@ function searchmail()
|
||||
}
|
||||
//function to read the attachment file contents
|
||||
att =getAttachValue()
|
||||
if (getmodule_install() == "no")
|
||||
{
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
return false
|
||||
}
|
||||
window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");
|
||||
createInstance(name,test)
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (getmodule_install() == "no")
|
||||
{
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
return false
|
||||
}
|
||||
window.open("chrome://openerp_plugin/content/plugin.xul", "", "chrome, resizable=yes");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function open_contact()
|
||||
{
|
||||
setTimeout("createConnection()",5000)
|
||||
if (getconnect_server() == "false")
|
||||
{
|
||||
alert("Please Login To The Database First !")
|
||||
return false;
|
||||
}
|
||||
setTimeout("module_install()", 10000)
|
||||
if (getmodule_install() == "no")
|
||||
{
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
return false
|
||||
}
|
||||
if(GetNumSelectedMessages() < 1 || GetNumSelectedMessages() > 1){
|
||||
alert("You must select only one mail For Open Contact Detail");
|
||||
return false
|
||||
var openPartnerHandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
// var sendername = getSenderEmail();
|
||||
var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
|
||||
var count = arrIdList.Count();
|
||||
for (i = 0; i < count; i++) {
|
||||
var strlResult = arrIdList.QueryElementAt(i, Components.interfaces.nsISupportsArray);
|
||||
var strlSearchResult = strlResult.QueryElementAt(0, Components.interfaces.nsISupportsCString);
|
||||
var strlSearchResultValue = strlResult.QueryElementAt(1, Components.interfaces.nsISupportsCString);
|
||||
if(strlSearchResult=="email" && strlSearchResultValue=='')
|
||||
{
|
||||
alert("Partner is not Available.");
|
||||
return;
|
||||
}
|
||||
if(strlSearchResult=="partner_id"){
|
||||
partner_id = strlSearchResultValue;
|
||||
weburl = getWebServerURL();
|
||||
var branchobj = getPref();
|
||||
db_name = branchobj.getCharPref("serverdbname");
|
||||
if (weburl == false){
|
||||
weburl = 'http://localhost:8080'
|
||||
}
|
||||
if (partner_id > 0){
|
||||
window.open(weburl + "/model=res.partner&id=" + partner_id)
|
||||
}
|
||||
else{
|
||||
alert("Partner is not Available.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
|
||||
},
|
||||
|
||||
onError: function (client, ctxt, status, errorMsg) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function searchPartner(email)
|
||||
{
|
||||
var branchobj = getPref();
|
||||
setServerService('xmlrpc/object');
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
arrFinalList = [];
|
||||
var xmlRpcClient = getXmlRpc();
|
||||
var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strDbName.data = branchobj.getCharPref("serverdbname");
|
||||
var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
|
||||
struid.data = branchobj.getIntPref('userid');
|
||||
var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strpass.data = branchobj.getCharPref("password");
|
||||
var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strobj.data = 'thunderbird.partner';
|
||||
var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strmethod.data = 'search_contact';
|
||||
var strname = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strname.data = email;
|
||||
xmlRpcClient.asyncCall(openPartnerHandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod,strname ],6);
|
||||
}
|
||||
function open_partner()
|
||||
{
|
||||
if (check() == false){
|
||||
return true
|
||||
}
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
||||
var version_obj = prefService.getBranch("extensions.");
|
||||
version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
version = version_obj.getCharPref("lastAppVersion");
|
||||
version = parseInt(version[0])
|
||||
|
||||
file = getPredefinedFolder(2);
|
||||
|
||||
if (version > 2)
|
||||
{
|
||||
var emlsArray = gFolderDisplay.selectedMessages;
|
||||
}
|
||||
else
|
||||
{
|
||||
var emlsArray = GetSelectedMessages();
|
||||
}
|
||||
|
||||
IETtotal = emlsArray.length;
|
||||
IETexported = 0;
|
||||
var msguri = emlsArray[0];
|
||||
|
||||
|
||||
//gives the selected email uri
|
||||
var messageUri= gDBView.URIForFirstSelectedMessage;
|
||||
|
||||
@@ -210,39 +279,156 @@ function open_contact()
|
||||
sendername = message.author.split('"')[1].split('"')[0];
|
||||
}
|
||||
else if(message.author.indexOf('<')!=-1){
|
||||
sendername = message.author.split('<')[0];
|
||||
sendername = message.author.split('<')[0];
|
||||
}
|
||||
else{
|
||||
sendername = message.author;
|
||||
sendername = message.author;
|
||||
}
|
||||
if(message.author.indexOf('<')!=-1){
|
||||
senderemail = message.author.split('<')[1].split('>')[0];
|
||||
senderemail = message.author.split('<')[1].split('>')[0];
|
||||
}
|
||||
else{
|
||||
senderemail = message.author
|
||||
senderemail = message.author
|
||||
}
|
||||
searchPartner(senderemail);
|
||||
}
|
||||
var listDocumentHandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
var res = result.QueryInterface(Components.interfaces.nsISupportsArray);
|
||||
res_id = res.QueryElementAt(1, Components.interfaces.nsISupportsPRInt32);
|
||||
model = res.QueryElementAt(0, Components.interfaces.nsISupportsCString);
|
||||
weburl = getWebServerURL()
|
||||
if (weburl == false){
|
||||
weburl = 'http://localhost:8080'
|
||||
}
|
||||
var branchobj = getPref();
|
||||
db_name = branchobj.getCharPref("serverdbname");
|
||||
window.open(weburl + "/model=" + model +"&id=" + res_id)
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
|
||||
//set the initial information for the selected email
|
||||
setSenderEmail(senderemail);
|
||||
setSenderName(sendername);
|
||||
setPartnerName("");
|
||||
setStreet("");
|
||||
setStreet2("");
|
||||
setZipCode("");
|
||||
setCity("");
|
||||
setOfficenumber("");
|
||||
setFax("");
|
||||
setMobilenumber("");
|
||||
|
||||
if (getmodule_install() == "no")
|
||||
},
|
||||
|
||||
onError: function (client, ctxt, status, errorMsg) {
|
||||
|
||||
}
|
||||
}
|
||||
function open_document()
|
||||
{
|
||||
if (check() == false){
|
||||
return true
|
||||
}
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
||||
var version_obj = prefService.getBranch("extensions.");
|
||||
version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
version = version_obj.getCharPref("lastAppVersion");
|
||||
version = parseInt(version[0])
|
||||
|
||||
file = getPredefinedFolder(2);
|
||||
|
||||
if (version > 2)
|
||||
{
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
return false
|
||||
var emlsArray = gFolderDisplay.selectedMessages;
|
||||
}
|
||||
else
|
||||
{
|
||||
var emlsArray = GetSelectedMessages();
|
||||
}
|
||||
|
||||
IETtotal = emlsArray.length;
|
||||
IETexported = 0;
|
||||
var msguri = emlsArray[0];
|
||||
|
||||
|
||||
var branchobj = getPref();
|
||||
setServerService('xmlrpc/object');
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
var xmlRpcClient = getXmlRpc();
|
||||
var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strDbName.data = branchobj.getCharPref("serverdbname");
|
||||
var struids = xmlRpcClient.createType(xmlRpcClient.INT,{});
|
||||
struids.data = branchobj.getIntPref('userid');
|
||||
var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strpass.data = branchobj.getCharPref("password");
|
||||
var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strmethod.data = 'search_message';
|
||||
var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strobj.data = 'thunderbird.partner';
|
||||
var eml_string = parse_eml()
|
||||
var a = ['model', 'message'];
|
||||
var b = [object, eml_string];
|
||||
var arrofarr = dictcontact(a,b);
|
||||
xmlRpcClient.asyncCall(listDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
|
||||
}
|
||||
function open_contact()
|
||||
{
|
||||
if (check() == false){
|
||||
return true
|
||||
}
|
||||
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
|
||||
var version_obj = prefService.getBranch("extensions.");
|
||||
version_obj.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
version = version_obj.getCharPref("lastAppVersion");
|
||||
version = parseInt(version[0])
|
||||
|
||||
file = getPredefinedFolder(2);
|
||||
|
||||
if (version > 2)
|
||||
{
|
||||
var emlsArray = gFolderDisplay.selectedMessages;
|
||||
}
|
||||
else
|
||||
{
|
||||
var emlsArray = GetSelectedMessages();
|
||||
}
|
||||
|
||||
IETtotal = emlsArray.length;
|
||||
IETexported = 0;
|
||||
var msguri = emlsArray[0];
|
||||
|
||||
|
||||
//gives the selected email uri
|
||||
var messageUri= gDBView.URIForFirstSelectedMessage;
|
||||
|
||||
var messenger = Components.classes['@mozilla.org/messenger;1'].createInstance(Components.interfaces.nsIMessenger);
|
||||
|
||||
//gives the selected email object
|
||||
var message = messenger.messageServiceFromURI(messageUri).messageURIToMsgHdr(messageUri);
|
||||
|
||||
//functionality to split the author name and email
|
||||
if(message.author.charAt(0) == '"'){
|
||||
sendername = message.author.split('"')[1].split('"')[0];
|
||||
}
|
||||
else if(message.author.indexOf('<')!=-1){
|
||||
sendername = message.author.split('<')[0];
|
||||
}
|
||||
else{
|
||||
sendername = message.author;
|
||||
}
|
||||
if(message.author.indexOf('<')!=-1){
|
||||
senderemail = message.author.split('<')[1].split('>')[0];
|
||||
}
|
||||
else{
|
||||
senderemail = message.author
|
||||
}
|
||||
|
||||
//set the initial information for the selected email
|
||||
setSenderEmail(senderemail);
|
||||
setSenderName(sendername);
|
||||
setPartnerName("");
|
||||
setStreet("");
|
||||
setStreet2("");
|
||||
setZipCode("");
|
||||
setCity("");
|
||||
setOfficenumber("");
|
||||
setFax("");
|
||||
setMobilenumber("");
|
||||
searchContact();
|
||||
}
|
||||
|
||||
|
||||
|
||||
//function to open the configuration window
|
||||
var Config = {
|
||||
onLoad: function() {
|
||||
@@ -279,18 +465,18 @@ var Create = {
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", function(e) { Create.onLoad(e); }, false);
|
||||
|
||||
|
||||
var Address = {
|
||||
onLoad: function(){
|
||||
this.initialized=true;
|
||||
},
|
||||
|
||||
onMenuItemCommand: function(){
|
||||
onMenuItemCommand: function(){
|
||||
open_contact();
|
||||
searchContact();
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
//function to open the window for selecting the partner for a new contact creation
|
||||
var Select = {
|
||||
@@ -298,11 +484,12 @@ var Select = {
|
||||
this.initialized=true;
|
||||
},
|
||||
|
||||
onMenuItemCommand: function(){
|
||||
//document.getElementById("txtselectpartner").value="";
|
||||
onMenuItemCommand: function(){
|
||||
// document.getElementById("txtselectpartner").value="";
|
||||
window.open("chrome://openerp_plugin/content/selectpartner.xul", "", "chrome");
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
var CreatePartner = {
|
||||
onLoad: function(){
|
||||
@@ -310,7 +497,7 @@ var CreatePartner = {
|
||||
},
|
||||
|
||||
onMenuItemCommand: function(){
|
||||
window.open("chrome://openerp_plugin/content/createpartner.xul", "", "chrome");
|
||||
window.open("chrome://openerp_plugin/content/createpartner.xul", "", "chrome");
|
||||
}
|
||||
};
|
||||
window.addEventListener("load", function(e) { CreatePartner.onLoad(e); }, false);
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
image="&menuicon.value;"
|
||||
class="menuitem-iconic"
|
||||
tooltiptext="&pluginconfig.value;"/>
|
||||
</menupopup>
|
||||
</menupopup>
|
||||
|
||||
<menupopup id="taskPopup">
|
||||
<menuitem id="tiny-plugin1" label="&tinypluginconfig;"
|
||||
@@ -49,13 +49,20 @@
|
||||
label= "Open Contact"
|
||||
oncommand="Address.onMenuItemCommand(event);" />
|
||||
</toolbarpalette>
|
||||
|
||||
<toolbarpalette id="MailToolbarPalette">
|
||||
<toolbarbutton id="GA-button2"
|
||||
class="toolbarbutton-1"
|
||||
image="&partnericon.value;"
|
||||
label= "Open Partner"
|
||||
oncommand="open_partner();"
|
||||
/>
|
||||
</toolbarpalette>
|
||||
<toolbarpalette id="MailToolbarPalette">
|
||||
<toolbarbutton id="GA-button3"
|
||||
class="toolbarbutton-1"
|
||||
image="&imagearchive.value;"
|
||||
label= "Open Document"
|
||||
oncommand="archivemail();" />
|
||||
oncommand="open_document();" />
|
||||
</toolbarpalette>
|
||||
|
||||
|
||||
|
||||
+2
-3
@@ -1,8 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin/global.css" type="text/css"?>
|
||||
<!DOCTYPE window SYSTEM "chrome://openerp_plugin/locale/selectpartner.dtd">
|
||||
<window id="partnerwindowsid" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
|
||||
<window id="partnerwindowsid" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" xmlns:html="http://www.w3.org/1999/xhtml" onload="getPartnerList()"
|
||||
title="&title.label;" height="500" width="375">
|
||||
<script type="text/javascript" src="chrome://openerp_plugin/content/tiny_xmlrpc.js"></script>
|
||||
<script type="text/javascript" src="chrome://openerp_plugin/content/config.js"></script>
|
||||
@@ -29,7 +28,7 @@
|
||||
<button label="Create Partner" image="&imagecreate.value;" oncommand="CreatePartner.onMenuItemCommand(event);"/>
|
||||
<spacer width="45"/>
|
||||
<button label="&cancel.label;" image="&imagecancel.value;" oncommand="close();" />
|
||||
<button label="&select.label;" image="&imageok.value;" oncommand="selectPartner();close()"/>
|
||||
<button label="&select.label;" image="&imageok.value;" oncommand="selectPartner();close();"/>
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
|
||||
+111
-28
@@ -201,6 +201,10 @@ function setDbName(argDbName){
|
||||
getPref().setCharPref('serverdbname',argDbName);
|
||||
}
|
||||
|
||||
//set webserver url
|
||||
function setWebServerURL(argWebServerURL){
|
||||
getPref().setCharPref('webserverurl',argWebServerURL);
|
||||
}
|
||||
//set preference value of username for login
|
||||
function setUsername(argUsername){
|
||||
getPref().setCharPref('username',argUsername);
|
||||
@@ -399,6 +403,11 @@ function getDbName(){
|
||||
return getPref().getCharPref('serverdbname');
|
||||
}
|
||||
|
||||
//get webserver url
|
||||
function getWebServerURL(){
|
||||
return getPref().getCharPref('webserverurl');
|
||||
}
|
||||
|
||||
//get username from config settings
|
||||
function getUsername(){
|
||||
return getPref().getCharPref('username');
|
||||
@@ -459,7 +468,8 @@ function getSenderName(){
|
||||
}
|
||||
}
|
||||
|
||||
//ger partner name
|
||||
|
||||
//get partner name
|
||||
function getPartnerName(){
|
||||
return getPref().getCharPref('partnername');
|
||||
}
|
||||
@@ -909,31 +919,46 @@ function createMenuItem(aLabel) {
|
||||
}
|
||||
|
||||
|
||||
function listinstallmodule( result ) {
|
||||
if ( rpc.onfault( result ) )
|
||||
{
|
||||
setmodule_install('no')
|
||||
var listinstallmodulehandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
var arrIdList = result.QueryInterface(Components.interfaces.nsISupportsArray);
|
||||
var count = arrIdList.Count();
|
||||
if (count > 0)
|
||||
{
|
||||
setmodule_install('yes')
|
||||
}
|
||||
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
setmodule_install('no')
|
||||
},
|
||||
|
||||
onError: function (client, ctxt, status, errorMsg) {
|
||||
setmodule_install('no')
|
||||
}
|
||||
}
|
||||
|
||||
function module_install()
|
||||
{
|
||||
setmodule_install("yes")
|
||||
setmodule_install("no")
|
||||
var branchobj = getPref();
|
||||
setServerService('xmlrpc/object');
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
var xmlRpcClient = getXmlRpc();
|
||||
strDbName = branchobj.getCharPref("serverdbname");
|
||||
struid = branchobj.getIntPref('userid');
|
||||
strpass = branchobj.getCharPref("password");
|
||||
strmethod = 'search';
|
||||
strobj = 'thunderbird.partner'; // TOFIX: Find module 'thunderbird' into 'module.module' model.
|
||||
var temp = new Array()
|
||||
server=getServer()
|
||||
port=getPort()
|
||||
basicList=getBasicList()
|
||||
rpc.addserver('object',basicList[3] , basicList[4],'/xmlrpc/object');
|
||||
srcids=rpc.ask( 'object', 'execute', [basicList[0],basicList[1],basicList[2],strobj,strmethod,[]],listinstallmodule)
|
||||
var strDbName = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strDbName.data = branchobj.getCharPref("serverdbname");
|
||||
var struid = xmlRpcClient.createType(xmlRpcClient.INT,{});
|
||||
struid.data = branchobj.getIntPref('userid');
|
||||
var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strpass.data = branchobj.getCharPref("password");
|
||||
var strmethod = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strmethod.data = 'name_search';
|
||||
var strobj = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strobj.data = 'ir.model';
|
||||
var strvalue = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strvalue.data = 'thunderbird.partner';
|
||||
xmlRpcClient.asyncCall(listinstallmodulehandler,null,'execute',[ strDbName,struid,strpass,strobj,strmethod, strvalue],6);
|
||||
}
|
||||
|
||||
|
||||
@@ -951,7 +976,7 @@ var listSearchContactHandler = {
|
||||
setPartnerName(strlSearchResultValue);
|
||||
var t = getPartnerName();}
|
||||
|
||||
if(strlSearchResult=="contactname"){
|
||||
if(strlSearchResult=="contactname"){
|
||||
setSenderName(strlSearchResultValue);
|
||||
var t = getSenderName();}
|
||||
|
||||
@@ -1048,6 +1073,7 @@ var listSearchContactdetailHandler = {
|
||||
document.getElementById("txtmobile").value =strlSearchResultValue;}
|
||||
|
||||
if(strlSearchResult=="email"&& strlSearchResultValue!=''){
|
||||
alert("Contact is Available.")
|
||||
document.getElementById("txtemail").value =strlSearchResultValue;}
|
||||
|
||||
if(strlSearchResult=="res_id"){
|
||||
@@ -1195,7 +1221,7 @@ var listSearchCheckboxHandler = {
|
||||
listcell.setAttribute("label",arrFinalList[i][j][1]); //stores the name ofthe record
|
||||
listItem.appendChild(listcell);
|
||||
listItem.value = arrFinalList[i][j][0]; //stores the id of the record
|
||||
listItem.label = arr1[i]; // stores the value of the object
|
||||
listItem.label = arr1[i]; // stores the value of the object
|
||||
cmbSearchList.appendChild(listItem);
|
||||
}
|
||||
}
|
||||
@@ -1303,7 +1329,9 @@ var listPartnerHandler = {
|
||||
listItem.value = arrPartnerList[i][0];
|
||||
cmdPartnerList.appendChild(listItem);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
|
||||
@@ -1362,7 +1390,24 @@ function dictcontact(a,b){
|
||||
var listArchiveHandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
list_documents = document.getElementById('listSearchBox')
|
||||
var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
|
||||
createId = parseInt(createId);
|
||||
if(createId==0)
|
||||
{
|
||||
alert("Mail is Already Archived Successfully.");
|
||||
}
|
||||
else if (createId<0)
|
||||
{
|
||||
alert("sorry Mail is not Archived");
|
||||
|
||||
}
|
||||
|
||||
else if (createId>=1)
|
||||
{
|
||||
alert("Mail Archived Successfully");
|
||||
}
|
||||
window.close();
|
||||
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
@@ -1402,6 +1447,7 @@ function parse_eml(){
|
||||
var output = sis.read( sis.available() );
|
||||
return output
|
||||
}
|
||||
|
||||
}
|
||||
function upload_archivemail()
|
||||
{
|
||||
@@ -1438,14 +1484,34 @@ function upload_archivemail()
|
||||
var a = ['ref_ids','message'];
|
||||
var b = [ref_ids, eml_string];
|
||||
var arrofarr = dictcontact(a,b);
|
||||
|
||||
xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
|
||||
alert("Mail Archived Successfully.");
|
||||
window.close();
|
||||
// alert("Mail Archived Successfully to" +" " + ":" + " "+ list_documents.value);
|
||||
//window.close();
|
||||
|
||||
}
|
||||
|
||||
var listArchiveDocumentHandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
var createId = result.QueryInterface(Components.interfaces.nsISupportsPRInt32);
|
||||
var popup = document.getElementById("section").selectedItem;
|
||||
alert("Document Created Successfully For " +" " + ":" + " "+ popup.label);
|
||||
window.close();
|
||||
|
||||
},
|
||||
onFault: function (client, ctxt, fault) {
|
||||
|
||||
},
|
||||
|
||||
onError: function (client, ctxt, status, errorMsg) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function create_archivemail(){
|
||||
var popup = document.getElementById("section").selectedItem; // a <menupopup> element
|
||||
var popup = document.getElementById("section").selectedItem;
|
||||
// a <menupopup> element
|
||||
|
||||
if (String(popup) != "null"){
|
||||
object=popup.value;
|
||||
@@ -1469,10 +1535,10 @@ function create_archivemail(){
|
||||
var a = ['model', 'message'];
|
||||
var b = [object, eml_string];
|
||||
var arrofarr = dictcontact(a,b);
|
||||
xmlRpcClient.asyncCall(listArchiveHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
|
||||
alert("Document Created Successfully.");
|
||||
xmlRpcClient.asyncCall(listArchiveDocumentHandler,null,'execute',[strDbName,struids,strpass,strobj,strmethod,arrofarr],6);
|
||||
//alert("Document Created Successfully For " +" " + ":" + " "+ popup.label);
|
||||
}
|
||||
window.close();
|
||||
//window.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1679,6 +1745,16 @@ function createInstance(name,test){
|
||||
}
|
||||
|
||||
//xmlrpc request handler for handling the login information
|
||||
function check_module_install(count){
|
||||
if (getmodule_install() == "no")
|
||||
{
|
||||
if (count <= 0){ return false; }
|
||||
count = count - 1;
|
||||
return check_module_install(count)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
var listLoginHandler = {
|
||||
onResult: function(client, context, result) {
|
||||
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');
|
||||
@@ -1686,8 +1762,14 @@ var listLoginHandler = {
|
||||
if(login.type == 12){
|
||||
login = result.QueryInterface(Components.interfaces.nsISupportsPRInt32)
|
||||
setUserId(login.data);
|
||||
alert('Successfully Login To OpenERP.');
|
||||
window.close();
|
||||
module_install();
|
||||
alert('Successfully Login To OpenERP.');
|
||||
if (check_module_install(5) == false){
|
||||
alert("Please install the thunderbird module on your '" + getDbName() +"' database and try again !");
|
||||
}
|
||||
else{
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
else{
|
||||
alert("Login Failed");
|
||||
@@ -1744,6 +1826,7 @@ function testConnection(){
|
||||
var strpass = xmlRpcClient.createType(xmlRpcClient.STRING,{});
|
||||
strpass.data = getPref().getCharPref('password');
|
||||
xmlRpcClient.asyncCall(listLoginHandler,null,'login',[strDbName,strusername,strpass],3);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1944,7 +2027,7 @@ var listsearchAttachmentHandler = {
|
||||
count += 1
|
||||
var hbox = document.createElement("vbox");
|
||||
var checkbox1 = document.createElement("checkbox");
|
||||
|
||||
|
||||
checkbox1.setAttribute("label",object[i]);
|
||||
checkbox1.setAttribute("id","cbx"+(i+1));
|
||||
checkbox1.setAttribute("width",150)
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@
|
||||
<!ENTITY ok.label "Save">
|
||||
<!ENTITY partner.label "Create New Contact :">
|
||||
<!ENTITY create.label "New Contact">
|
||||
<!ENTITY cancel.label "Cancel">
|
||||
<!ENTITY cancel.label "Close">
|
||||
<!ENTITY newpartner.label "New Partner">
|
||||
<!ENTITY bsearch.label "Search Contact">
|
||||
<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<!ENTITY title.label "OpenERP Configuration">
|
||||
<!ENTITY separate.label "Configuration Login for OpenERP!">
|
||||
<!ENTITY close.label "Cancel">
|
||||
<!ENTITY close.label "Close">
|
||||
<!ENTITY database.label "Database:">
|
||||
<!ENTITY ok.label "OK">
|
||||
<!ENTITY connection.label "Connect">
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@
|
||||
<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
|
||||
<!ENTITY cbxarchive.label "Archive">
|
||||
<!ENTITY ok.label "Save">
|
||||
<!ENTITY cancel.label "Cancel">
|
||||
<!ENTITY cancel.label "Close">
|
||||
<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
|
||||
<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
|
||||
<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
|
||||
@@ -31,7 +31,7 @@
|
||||
<!ENTITY bsearch.label "Search">
|
||||
<!ENTITY create.label "Create">
|
||||
<!ENTITY select.label "Select">
|
||||
<!ENTITY cancel.label "Cancel">
|
||||
<!ENTITY cancel.label "Close">
|
||||
<!ENTITY reload.label "Reload">
|
||||
<!ENTITY imagecreate.value "chrome://openerp_plugin/skin/Create.png">
|
||||
<!ENTITY imagereload.value "chrome://openerp_plugin/skin/Archive.png">
|
||||
|
||||
+1
-1
@@ -2,6 +2,6 @@
|
||||
<!ENTITY name.value "Name:">
|
||||
<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
|
||||
<!ENTITY ok.label "Save">
|
||||
<!ENTITY cancel.label "Cancel">
|
||||
<!ENTITY cancel.label "Close">
|
||||
<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
|
||||
<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
<!ENTITY tinyarchive "Archive to OpenERP">
|
||||
<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
|
||||
<!ENTITY menuicon.value "chrome://openerp_plugin/skin/openerp-icon.png">
|
||||
<!ENTITY partnericon.value "chrome://openerp_plugin/skin/Partner.png">
|
||||
<!ENTITY partnericon.value "chrome://openerp_plugin/skin/partner.png">
|
||||
<!ENTITY imagearchive.value "chrome://openerp_plugin/skin/document-new.png">
|
||||
<!ENTITY tooltip.value "Add To Archive">
|
||||
<!ENTITY pluginconfig.value "OpenERP Configuration Settings">
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<!ENTITY create.label "Create">
|
||||
<!ENTITY imageicon.value "chrome://openerp_plugin/skin/NEWT1.png">
|
||||
<!ENTITY select.label "Select">
|
||||
<!ENTITY cancel.label "Cancel">
|
||||
<!ENTITY cancel.label "Close">
|
||||
<!ENTITY imagesearch.value "chrome://openerp_plugin/skin/Search.gif">
|
||||
<!ENTITY imagecancel.value "chrome://openerp_plugin/skin/Error.gif">
|
||||
<!ENTITY imageok.value "chrome://openerp_plugin/skin/Success.gif">
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
<field name="plugin_file" filename="name"/>
|
||||
<newline/>
|
||||
<field name="pdf_file" filename="pdf_name"/>
|
||||
<field name="pdf_file" filename="pdf_name" widget="url"/>
|
||||
<newline/>
|
||||
<separator string="Installation and Configuration Steps" colspan="4"/>
|
||||
<field name="description" nolabel="1" colspan="8"/>
|
||||
@@ -76,8 +76,7 @@
|
||||
<field name="context">{'menu':True}</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="base.menu_base_config_mail" name="Mail" parent="base.menu_base_config" sequence="10"/>
|
||||
<menuitem id="base.menu_base_config_plugins" name="Plugins" parent="base.menu_base_config_mail" sequence="10" />
|
||||
<menuitem id="base.menu_base_config_plugins" name="Plugins" parent="base.menu_base_config" sequence="10" />
|
||||
<menuitem id="menu_base_config_plugins_thunderbird" action="action_thunderbird_wizard" name="Thunderbird Plug-In" parent="base.menu_base_config_plugins" sequence="10" />
|
||||
|
||||
</data>
|
||||
|
||||
Reference in New Issue
Block a user