bzr revid: vir@tinyerp.com-20101027050557-fa9dmeooh5se7udy
This commit is contained in:
Vir (Open ERP) 2010-10-27 10:35:57 +05:30
commit 804b40ad23
62 changed files with 713 additions and 1280 deletions

View File

@ -2874,10 +2874,12 @@ class wizard_multi_charts_accounts(osv.osv_memory):
obj_ac_fp.create(cr, uid, vals_acc)
ir_values = self.pool.get('ir.values')
ir_values.set(cr, uid, key='default', key2=False, name="taxes_id", company=obj_multi.company_id.id
, models =[('product.product',False)], value=[tax_template_to_tax[obj_multi.sale_tax.id]])
ir_values.set(cr, uid, key='default', key2=False, name="supplier_taxes_id", company=obj_multi.company_id.id
, models =[('product.product',False)], value=[tax_template_to_tax[obj_multi.purchase_tax.id]])
if obj_multi.sale_tax:
ir_values.set(cr, uid, key='default', key2=False, name="taxes_id", company=obj_multi.company_id.id,
models =[('product.product',False)], value=[tax_template_to_tax[obj_multi.sale_tax.id]])
if obj_multi.purchase_tax:
ir_values.set(cr, uid, key='default', key2=False, name="supplier_taxes_id", company=obj_multi.company_id.id,
models =[('product.product',False)], value=[tax_template_to_tax[obj_multi.purchase_tax.id]])
wizard_multi_charts_accounts()

View File

@ -198,7 +198,7 @@
<search string="Accounts">
<group col="10" colspan="4">
<filter icon="terp-sale" string="Receivable Accounts" domain="[('type','=','receivable')]"/>
<filter icon="terp-purchase" string="Purchase Accounts" domain="[('type','=','purchase')]"/>
<filter icon="terp-purchase" string="Payable Accounts" domain="[('type','=','payable')]"/>
<separator orientation="vertical"/>
<field name="code"/>
<field name="name"/>

View File

@ -79,7 +79,6 @@ class partner_balance(report_sxw.rml_parse, common_report_header):
move_state = ['posted']
full_account = []
result_tmp = 0.0
self.cr.execute(
"SELECT p.ref,l.account_id,ac.name AS account_name,ac.code AS code,p.name, sum(debit) AS debit, sum(credit) AS credit, " \
"CASE WHEN sum(debit) > sum(credit) " \

View File

@ -77,7 +77,6 @@ class report_pl_account_horizontal(rml_parse.rml_parse, common_report_header):
db_pool = pooler.get_pool(self.cr.dbname)
account_pool = db_pool.get('account.account')
year_pool = db_pool.get('account.fiscalyear')
types = [
'expense',

View File

@ -21,9 +21,9 @@
##############################################################################
import time
import rml_parse
from report import report_sxw
import re
def _get_country(record):
if record.partner_id \

View File

@ -19,7 +19,6 @@
#
##############################################################################
import time
import re
import sys
@ -55,15 +54,15 @@ class rml_parse(report_sxw.rml_parse):
ellipsis = ellipsis or ''
try:
return string[:maxlen - len(ellipsis) ] + (ellipsis, '')[len(string) < maxlen]
except Exception, e:
except:
return False
def _strip_name(self, name, maxlen=50):
return self._ellipsis(name, maxlen, '...')
def _get_and_change_date_format_for_swiss (self,date_to_format):
def _get_and_change_date_format_for_swiss(self,date_to_format):
date_formatted=''
if date_to_format:
date_formatted = strptime (date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
date_formatted = strptime(date_to_format,'%Y-%m-%d').strftime('%d.%m.%Y')
return date_formatted
def _explode_name(self,chaine,length):
@ -109,15 +108,14 @@ class rml_parse(report_sxw.rml_parse):
i = i + length
chaine = str("".join(ast))
return chaine
def repair_string(self,chaine):
def repair_string(self, chaine):
ast = list(chaine)
UnicodeAst = []
_previouslyfound = False
i = 0
while i < len(ast):
elem = ast[i]
try:
Stringer = elem.encode("utf-8")
elem.encode("utf-8")
except UnicodeDecodeError:
to_reencode = elem + ast[i+1]
print str(to_reencode)

View File

@ -66,7 +66,8 @@ class account_tax_chart(osv.osv_memory):
result['context'] = str({'state': data['target_move']})
if data['period_id']:
result['name'] += ':' + self.pool.get('account.period').read(cr, uid, [data['period_id']], context=context)[0]['code']
period_code = period_obj.read(cr, uid, [data['period_id']], context=context)[0]['code']
result['name'] += period_code and (':' + period_code) or ''
return result
_defaults = {

View File

@ -250,33 +250,56 @@ class account_analytic_account(osv.osv):
def _ca_invoiced_calc(self, cr, uid, ids, name, arg, context=None):
res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)], context=context))
if parent_ids:
cr.execute("SELECT account_analytic_line.account_id, COALESCE(SUM(amount_currency), 0.0) \
res_final = {}
child_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)], context=context))
for i in child_ids:
res[i] = {}
for n in [name]:
res[i][n] = 0.0
if not child_ids:
return res
if child_ids:
cr.execute("SELECT account_analytic_line.account_id, COALESCE(SUM(amount), 0.0) \
FROM account_analytic_line \
JOIN account_analytic_journal \
ON account_analytic_line.journal_id = account_analytic_journal.id \
WHERE account_analytic_line.account_id IN %s \
AND account_analytic_journal.type = 'sale' \
GROUP BY account_analytic_line.account_id", (parent_ids,))
GROUP BY account_analytic_line.account_id", (child_ids,))
for account_id, sum in cr.fetchall():
res[account_id] = round(sum,2)
return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context=context)
res[account_id][name] = round(sum,2)
data = self._compute_level_tree(cr, uid, ids, child_ids, res, [name], context)
for i in data:
res_final[i] = data[i][name]
return res_final
def _total_cost_calc(self, cr, uid, ids, name, arg, context=None):
res = {}
parent_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)], context=context))
if parent_ids:
cr.execute("""SELECT account_analytic_line.account_id, COALESCE(SUM(amount_currency), 0.0) \
res_final = {}
child_ids = tuple(self.search(cr, uid, [('parent_id', 'child_of', ids)], context=context))
for i in child_ids:
res[i] = {}
for n in [name]:
res[i][n] = 0.0
if not child_ids:
return res
if child_ids:
cr.execute("""SELECT account_analytic_line.account_id, COALESCE(SUM(amount), 0.0) \
FROM account_analytic_line \
JOIN account_analytic_journal \
ON account_analytic_line.journal_id = account_analytic_journal.id \
WHERE account_analytic_line.account_id IN %s \
AND amount<0 \
GROUP BY account_analytic_line.account_id""",(parent_ids,))
GROUP BY account_analytic_line.account_id""",(child_ids,))
for account_id, sum in cr.fetchall():
res[account_id] = round(sum,2)
return self._compute_currency_for_level_tree(cr, uid, ids, parent_ids, res, context=context)
res[account_id][name] = round(sum,2)
data = self._compute_level_tree(cr, uid, ids, child_ids, res, [name], context)
for i in data:
res_final[i] = data[i][name]
return res_final
def _remaining_hours_calc(self, cr, uid, ids, name, arg, context=None):
res = {}

View File

@ -24,4 +24,4 @@ import invoice
import report
import wizard
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -573,6 +573,7 @@ class account_voucher(osv.osv):
move_line_pool = self.pool.get('account.move.line')
currency_pool = self.pool.get('res.currency')
tax_obj = self.pool.get('account.tax')
seq_obj = self.pool.get('ir.sequence')
for inv in self.browse(cr, uid, ids):
if not inv.line_ids:
raise osv.except_osv(_('No Lines !'), _('Please create some lines'))
@ -581,7 +582,7 @@ class account_voucher(osv.osv):
if inv.number:
name = inv.number
elif inv.journal_id.sequence_id:
name = self.pool.get('ir.sequence').get_id(cr, uid, inv.journal_id.sequence_id.id)
name = seq_obj.get_id(cr, uid, inv.journal_id.sequence_id.id)
else:
raise osv.except_osv(_('Error !'), _('Please define a sequence on the journal !'))
if not inv.reference:
@ -687,7 +688,7 @@ class account_voucher(osv.osv):
rec_ids = [master_line, line.move_line_id.id]
rec_list_ids.append(rec_ids)
if not self.pool.get('res.currency').is_zero(cr, uid, inv.currency_id, line_total):
if not currency_pool.is_zero(cr, uid, inv.currency_id, line_total):
diff = line_total
move_line = {
'name': name,
@ -854,17 +855,19 @@ class account_bank_statement(osv.osv):
_inherit = 'account.bank.statement'
def button_cancel(self, cr, uid, ids, context=None):
voucher_obj = self.pool.get('account.voucher')
for st in self.browse(cr, uid, ids, context):
voucher_ids = []
for line in st.line_ids:
if line.voucher_id:
voucher_ids.append(line.voucher_id.id)
self.pool.get('account.voucher').cancel_voucher(cr, uid, voucher_ids, context)
voucher_obj.cancel_voucher(cr, uid, voucher_ids, context)
return super(account_bank_statement, self).button_cancel(cr, uid, ids, context=context)
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id, next_number, context=None):
voucher_obj = self.pool.get('account.voucher')
wf_service = netsvc.LocalService("workflow")
move_line_obj = self.pool.get('account.move.line')
bank_st_line_obj = self.pool.get('account.bank.statement.line')
st_line = bank_st_line_obj.browse(cr, uid, st_line_id, context=context)
if st_line.voucher_id:
@ -878,7 +881,7 @@ class account_bank_statement(osv.osv):
'move_ids': [(4, v.move_id.id, False)]
})
return self.pool.get('account.move.line').write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
return move_line_obj.write(cr, uid, [x.id for x in v.move_ids], {'statement_id': st_line.statement_id.id}, context=context)
return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line.id, company_currency_id, next_number, context=context)
account_bank_statement()
@ -912,14 +915,15 @@ class account_bank_statement_line(osv.osv):
}
def unlink(self, cr, uid, ids, context=None):
voucher_obj = self.pool.get('account.voucher')
statement_line = self.browse(cr, uid, ids, context)
unlink_ids = []
for st_line in statement_line:
if st_line.voucher_id:
unlink_ids.append(st_line.voucher_id.id)
self.pool.get('account.voucher').unlink(cr, uid, unlink_ids, context=context)
voucher_obj.unlink(cr, uid, unlink_ids, context=context)
return super(account_bank_statement_line, self).unlink(cr, uid, ids, context=context)
account_bank_statement_line()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:=======
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -32,7 +32,7 @@ class report_voucher(report_sxw.rml_parse):
'get_title': self.get_title,
'debit':self.debit,
'credit':self.credit,
'get_ref' : self._get_ref
'get_ref': self._get_ref
})
def convert(self, amount, cur):
@ -58,9 +58,10 @@ class report_voucher(report_sxw.rml_parse):
return credit
def _get_ref(self, voucher_id, move_ids):
voucher_line = self.pool.get('account.voucher.line').search(self.cr, self.uid, [('partner_id', '=', move_ids.partner_id.id), ('voucher_id', '=', voucher_id)])
voucher_line_obj = self.pool.get('account.voucher.line')
voucher_line = voucher_line_obj.search(self.cr, self.uid, [('partner_id', '=', move_ids.partner_id.id), ('voucher_id', '=', voucher_id)])
if voucher_line:
voucher = self.pool.get('account.voucher.line').browse(self.cr, self.uid, voucher_line)[0]
voucher = voucher_line_obj.browse(self.cr, self.uid, voucher_line)[0]
return voucher.name
else:
return

View File

@ -18,6 +18,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import time
from osv import fields, osv

View File

@ -25,15 +25,15 @@ from osv import fields
class account_voucher_unreconcile(osv.osv_memory):
_name = "account.voucher.unreconcile"
_description = "Account voucher unreconcile"
_columns = {
'remove':fields.boolean('Want to remove accounting entries too ?', required=False),
}
_defaults = {
'remove': True,
}
def trans_unrec(self, cr, uid, ids, context=None):
# res = self.browse(cr, uid, ids[0])
if context is None:
@ -54,9 +54,9 @@ class account_voucher_unreconcile(osv.osv_memory):
voucher_pool.cancel_voucher(cr, uid, [context.get('active_id')], context)
# wf_service = netsvc.LocalService("workflow")
# wf_service.trg_validate(uid, 'account.voucher', context.get('active_id'), 'cancel_voucher', cr)
return {}
account_voucher_unreconcile()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -59,6 +59,7 @@ if HOST.lower() == 'none':
else:
netsvc.Logger().notifyChannel("FTP", netsvc.LOG_INFO, "\n Serving FTP on %s:%s\n" % (HOST, PORT))
ds = ftp_server()
ds.daemon = True
ds.start()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -103,7 +103,7 @@ def get_value(cursor, user, recid, message=None, template=None, context=None):
class email_template(osv.osv):
"Templates for sending Email"
_name = "email.template"
_description = 'Email Templates for Models'
@ -131,7 +131,7 @@ class email_template(osv.osv):
'def_to':fields.char(
'Recipient (To)',
size=250,
help="The Recipient of email. "
help="The Recipient of email. "
"Placeholders can be used here. "
"e.g. ${object.email_to}"),
'def_cc':fields.char(
@ -146,20 +146,20 @@ class email_template(osv.osv):
help="Blind Carbon Copy address(es), comma-separated."
" Placeholders can be used here. "
"e.g. ${object.email_bcc}"),
'reply_to':fields.char('Reply-To',
size=250,
'reply_to':fields.char('Reply-To',
size=250,
help="The address recipients should reply to,"
" if different from the From address."
" Placeholders can be used here. "
"e.g. ${object.email_reply_to}"),
'message_id':fields.char('Message-ID',
size=250,
'message_id':fields.char('Message-ID',
size=250,
help="Specify the Message-ID SMTP header to use in outgoing emails. Please note that this overrides the Resource tracking option! Placeholders can be used here."),
'track_campaign_item':fields.boolean('Resource Tracking',
help="Enable this is you wish to include a special \
tracking marker in outgoing emails so you can identify replies and link \
them back to the corresponding resource record. \
This is useful for CRM leads for example"),
This is useful for CRM leads for example"),
'lang':fields.char(
'Language',
size=250,
@ -182,7 +182,7 @@ This is useful for CRM leads for example"),
translate=True),
'use_sign':fields.boolean(
'Signature',
help="the signature from the User details"
help="the signature from the User details"
" will be appended to the mail"),
'file_name':fields.char(
'Report Filename',
@ -199,16 +199,16 @@ This is useful for CRM leads for example"),
'attachment_id',
'Attached Files',
help="You may attach existing files to this template, "
"so they will be added in all emails created from this template"),
"so they will be added in all emails created from this template"),
'ref_ir_act_window':fields.many2one(
'ir.actions.act_window',
'Window Action',
help="Action that will open this email template on Resource records",
help="Action that will open this email template on Resource records",
readonly=True),
'ref_ir_value':fields.many2one(
'ir.values',
'Wizard Button',
help="Button in the side bar of the form view of this Resource that will invoke the Window Action",
help="Button in the side bar of the form view of this Resource that will invoke the Window Action",
readonly=True),
'allowed_groups':fields.many2many(
'res.groups',
@ -265,7 +265,7 @@ This is useful for CRM leads for example"),
'template_language' : lambda *a:'mako',
}
_sql_constraints = [
('name', 'unique (name)', _('The template name must be unique !'))
]
@ -312,11 +312,11 @@ This is useful for CRM leads for example"),
def delete_action(self, cr, uid, ids, context):
self.unlink_action(cr, uid, ids, context)
return True
def unlink(self, cr, uid, ids, context=None):
self.unlink_action(cr, uid, ids, context)
return super(email_template, self).unlink(cr, uid, ids, context)
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
@ -328,7 +328,7 @@ This is useful for CRM leads for example"),
new_name = new_name + '_' + random.choice('abcdefghij') + random.choice('lmnopqrs') + random.choice('tuvwzyz')
default.update({'name':new_name})
return super(email_template, self).copy(cr, uid, id, default, context)
def build_expression(self, field_name, sub_field_name, null_value, template_language='mako'):
"""
Returns a template expression based on data provided
@ -354,10 +354,10 @@ This is useful for CRM leads for example"),
if sub_field_name:
expression += "." + sub_field_name
if null_value:
expression += "|default: '''%s'''" % null_value
expression += "|default: '''%s'''" % null_value
expression += "}}"
return expression
return expression
def onchange_model_object_field(self, cr, uid, ids, model_object_field, template_language, context=None):
if not model_object_field:
return {}
@ -385,7 +385,7 @@ This is useful for CRM leads for example"),
result['sub_model_object_field'] = False
result['null_value'] = False
return {'value':result}
def onchange_sub_model_object_field(self, cr, uid, ids, model_object_field, sub_model_object_field, template_language, context=None):
if not model_object_field or not sub_model_object_field:
return {}
@ -447,7 +447,7 @@ This is useful for CRM leads for example"),
def _add_attachment(self, cursor, user, mailbox_id, name, data, filename, context=None):
"""
Add an attachment to a given mailbox entry.
:param data: base64 encoded attachment data to store
"""
attachment_obj = self.pool.get('ir.attachment')
@ -484,7 +484,7 @@ This is useful for CRM leads for example"),
"""
Generate report to be attached and attach it
to the email, and add any directly attached files as well.
@param cursor: Database Cursor
@param user: ID of User
@param template: Browse record of
@ -492,8 +492,8 @@ This is useful for CRM leads for example"),
@param record_id: ID of the target model
for which this mail has
to be generated
@param mail: Browse record of email object
@return: True
@param mail: Browse record of email object
@return: True
"""
if template.report_template:
reportname = 'report.' + \
@ -510,7 +510,7 @@ This is useful for CRM leads for example"),
user,
[record_id],
data,
context)
context)
fname = tools.ustr(get_value(cursor, user, record_id,
template.file_name, template, context)
or 'Report')
@ -524,7 +524,7 @@ This is useful for CRM leads for example"),
self._add_attachment(cursor, user, mail.id, attachment.name, attachment.datas, attachment.datas_fname, context)
return True
def _generate_mailbox_item_from_template(self,
cursor,
user,
@ -534,7 +534,7 @@ This is useful for CRM leads for example"),
"""
Generates an email from the template for
record record_id of target object
@param cursor: Database Cursor
@param user: ID of User
@param template: Browse record of
@ -542,7 +542,7 @@ This is useful for CRM leads for example"),
@param record_id: ID of the target model
for which this mail has
to be generated
@return: ID of created object
@return: ID of created object
"""
if context is None:
context = {}
@ -571,9 +571,9 @@ This is useful for CRM leads for example"),
ctx = context.copy()
ctx.update({'lang':lang})
template = self.browse(cursor, user, template.id, context=ctx)
# determine name of sender, either it is specified in email_id or we
# use the account name
# determine name of sender, either it is specified in email_id or we
# use the account name
email_id = from_account['email_id'].strip()
email_from = re.findall(r'([^ ,<@]+@[^> ,]+)', email_id)[0]
if email_from != email_id:
@ -663,7 +663,7 @@ This is useful for CRM leads for example"),
context)
return mailbox_id
def generate_mail(self,
cursor,
@ -721,7 +721,7 @@ email_template()
class email_template_preview(osv.osv_memory):
_name = "email_template.preview"
_description = "Email Template Preview"
def _get_model_recs(self, cr, uid, context=None):
if context is None:
context = {}
@ -738,6 +738,7 @@ class email_template_preview(osv.osv_memory):
if default_id and default_id not in ref_obj_ids:
ref_obj_ids.insert(0, default_id)
return model_obj.name_get(cr, uid, ref_obj_ids, context)
return []
def default_get(self, cr, uid, fields, context=None):
if context is None:
@ -762,7 +763,7 @@ class email_template_preview(osv.osv_memory):
context['template_id'],
['object_name'],
context)['object_name']
_columns = {
'ref_template':fields.many2one(
'email.template',
@ -772,13 +773,13 @@ class email_template_preview(osv.osv_memory):
'to':fields.char('To', size=250, readonly=True),
'cc':fields.char('CC', size=250, readonly=True),
'bcc':fields.char('BCC', size=250, readonly=True),
'reply_to':fields.char('Reply-To',
size=250,
'reply_to':fields.char('Reply-To',
size=250,
help="The address recipients should reply to,"
" if different from the From address."
" Placeholders can be used here."),
'message_id':fields.char('Message-ID',
size=250,
'message_id':fields.char('Message-ID',
size=250,
help="The Message-ID header value, if you need to"
"specify it, for example to automatically recognize the replies later."
" Placeholders can be used here."),
@ -819,7 +820,7 @@ class email_template_preview(osv.osv_memory):
vals['body_html'] = get_value(cr, uid, rel_model_ref, template.def_body_html, template, context)
vals['report'] = get_value(cr, uid, rel_model_ref, template.file_name, template, context)
return {'value':vals}
email_template_preview()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -55,7 +55,8 @@ class event_event(osv.osv):
'registration_ids': False,
})
return super(event_event, self).copy(cr, uid, id, default=default, context=context)
def onchange_product(self, cr, uid, ids, product_id):
def onchange_product(self, cr, uid, ids, product_id=False):
"""This function returns value of product's unit price based on product id.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@ -132,7 +133,6 @@ class event_event(osv.osv):
}
return res
def _get_register(self, cr, uid, ids, fields, args, context=None):
"""Get Confirm or uncofirm register value.
@param ids: List of Event registration type's id
@ -165,7 +165,6 @@ class event_event(osv.osv):
res[event.id]['register_current'] = number and number[0] or 0.0
if 'register_prospect' in fields:
res[event.id]['register_prospect'] = number and number[0] or 0.0
return res
def write(self, cr, uid, ids, vals, context=None):
@ -707,7 +706,7 @@ class event_registration_badge(osv.osv):
_name = 'event.registration.badge'
_description = __doc__
_columns = {
'registration_id': fields.many2one('event.registration', 'Registration', required=True),
"registration_id": fields.many2one('event.registration', 'Registration', required=True),
"title": fields.char('Title', size=128),
"name": fields.char('Name', size=128, required=True),
"address_id": fields.many2one('res.partner.address', 'Address'),

View File

@ -25,6 +25,8 @@ from osv import fields, osv
import tools
from tools.translate import _
import addons
class hr_employee_category(osv.osv):
def name_get(self, cr, uid, ids, context=None):
@ -180,9 +182,8 @@ class hr_employee(osv.osv):
return {'value': {'work_email' : work_email}}
def _get_photo(self, cr, uid, context=None):
return open(os.path.join(
tools.config['addons_path'], 'hr/image', 'photo.png'),
'rb') .read().encode('base64')
res_path = addons.get_module_resource("hr","image/photo.png")
return open(res_path,'rb').read().encode('base64')
_defaults = {
'active': 1,

View File

@ -6718,6 +6718,7 @@
<field name="ref_base_code_id" ref="vat_code_a49"/>
<field name="ref_tax_code_id" ref="vat_code_a64"/>
<field name="type_tax_use">sale</field>
<field name="sequence">0</field>
</record>
<record id="vat_21_s" model="account.tax.template">
<field name="chart_template_id" ref="l10nbe_chart_template"/>

View File

@ -1,166 +0,0 @@
<?xml version="1.0" ?>
<openerp>
<data noupdate="1">
<record id="account_tax_testingtax0" model="account.tax">
<field eval="1" name="sequence"/>
<field eval="1.0" name="base_sign"/>
<field eval="&quot;true&quot;" name="applicable_type"/>
<field name="company_id" ref="base.main_company"/>
<field eval="&quot;# price_unit
# address : res.partner.address object or False
# product : product.product object or False
result = price_unit * 0.10&quot;" name="python_compute_inv"/>
<field eval="1.0" name="ref_tax_sign"/>
<field eval="&quot;percent&quot;" name="type"/>
<field eval="1.0" name="ref_base_sign"/>
<field eval="&quot;1&quot;" name="active"/>
<field eval="&quot;testing tax&quot;" name="name"/>
<field eval="0.069" name="amount"/>
<field eval="&quot;# price_unit
# address : res.partner.address object or False
# product : product.product object or None
# partner : res.partner object or None
result = price_unit * 0.10&quot;" name="python_compute"/>
<field eval="1.0" name="tax_sign"/>
</record>
</data>
<data noupdate="1">
<record id="base.EUR" model="res.currency"/>
</data>
<data>
<record id="product_template_0" model="product.template">
<field name="list_price" eval="150.0"/>
<field name="name" eval="&quot;Membership 2006&quot;"/>
<field name="categ_id" eval="7"/>
<field name="type" eval="&quot;service&quot;"/>
</record>
</data>
<data>
<record id="product_product_0" model="product.product">
<field eval="&quot;2007-03-31&quot;" name="membership_date_to"/>
<field eval="&quot;1&quot;" name="membership"/>
<field eval="&quot;m2006&quot;" name="default_code"/>
<field eval="&quot;2006-01-01&quot;" name="membership_date_from"/>
<field eval="&quot;1&quot;" name="active"/>
<field eval="150.0" name="price_margin"/>
<field name="product_tmpl_id" ref="product_template_0"/>
</record>
</data>
<data>
<record id="product_template_1" model="product.template">
<field name="list_price" eval="160.0"/>
<field name="name" eval="&quot;Membership 2007&quot;"/>
<field name="categ_id" eval="7"/>
<field name="type" eval="&quot;service&quot;"/>
</record>
</data>
<data>
<record id="product_product_1" model="product.product">
<field eval="&quot;2008-03-31&quot;" name="membership_date_to"/>
<field eval="&quot;1&quot;" name="membership"/>
<field eval="&quot;m2007&quot;" name="default_code"/>
<field eval="&quot;2007-01-01&quot;" name="membership_date_from"/>
<field eval="&quot;1&quot;" name="active"/>
<field eval="160.0" name="price_margin"/>
<field name="product_tmpl_id" ref="product_template_1"/>
</record>
</data>
<data>
<record id="product_template_2" model="product.template">
<field name="list_price" eval="165.0"/>
<field name="name" eval="&quot;Membership 2008&quot;"/>
<field name="categ_id" eval="7"/>
<field name="type" eval="&quot;service&quot;"/>
</record>
</data>
<data>
<record id="product_product_2" model="product.product">
<field eval="&quot;2009-03-31&quot;" name="membership_date_to"/>
<field eval="&quot;1&quot;" name="membership"/>
<field eval="&quot;m2008&quot;" name="default_code"/>
<field eval="&quot;2008-01-01&quot;" name="membership_date_from"/>
<field eval="&quot;1&quot;" name="active"/>
<field eval="165.0" name="price_margin"/>
<field name="product_tmpl_id" ref="product_template_2"/>
</record>
</data>
<data noupdate="1">
<record id="account_invoice_0" model="account.invoice">
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="account_id" ref="account.a_recv"/>
<field name="address_contact_id" ref="base.res_partner_address_8"/>
<field eval="&quot;none&quot;" name="reference_type"/>
<field name="journal_id" ref="account.sales_journal"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="base.res_partner_address_8"/>
<field eval="&quot;paid&quot;" name="state"/>
<field eval="&quot;out_invoice&quot;" name="type"/>
<field eval="&quot;2006-02-10&quot;" name="date_invoice"/>
</record>
<record id="account_invoice_line_membership0" model="account.invoice.line">
<field name="uos_id" ref="product.product_uom_unit"/>
<field eval="&quot;Membership 2006&quot;" name="name"/>
<field name="invoice_id" ref="account_invoice_0"/>
<field eval="150.0" name="price_unit"/>
<field eval="[(6,0,[ref('account_tax_testingtax0')])]" name="invoice_line_tax_id"/>
<field name="product_id" ref="product_product_0"/>
<field eval="1.0" name="quantity"/>
<field name="account_id" ref="account.a_sale"/>
</record>
</data>
<data noupdate="1">
<record id="account_invoice_1" model="account.invoice">
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="account_id" ref="account.a_recv"/>
<field name="address_contact_id" ref="base.res_partner_address_8"/>
<field eval="&quot;none&quot;" name="reference_type"/>
<field name="journal_id" ref="account.sales_journal"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="base.res_partner_address_8"/>
<field eval="&quot;paid&quot;" name="state"/>
<field eval="&quot;out_invoice&quot;" name="type"/>
<field eval="&quot;2007-01-30&quot;" name="date_invoice"/>
</record>
<record id="account_invoice_line_membership1" model="account.invoice.line">
<field name="uos_id" ref="product.product_uom_unit"/>
<field eval="&quot;Membership 2007&quot;" name="name"/>
<field name="invoice_id" ref="account_invoice_1"/>
<field eval="160.0" name="price_unit"/>
<field eval="[(6,0,[ref('account_tax_testingtax0')])]" name="invoice_line_tax_id"/>
<field name="product_id" ref="product_product_1"/>
<field eval="1.0" name="quantity"/>
<field name="account_id" ref="account.a_sale"/>
</record>
</data>
<data noupdate="1">
<record id="account_invoice_2" model="account.invoice">
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="account_id" ref="account.a_recv"/>
<field name="address_contact_id" ref="base.res_partner_address_8"/>
<field eval="&quot;none&quot;" name="reference_type"/>
<field name="journal_id" ref="account.sales_journal"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="base.res_partner_address_8"/>
<field eval="&quot;paid&quot;" name="state"/>
<field eval="&quot;out_invoice&quot;" name="type"/>
<field eval="&quot;2007-11-30&quot;" name="date_invoice"/>
</record>
<record id="account_invoice_line_membership1" model="account.invoice.line">
<field name="uos_id" ref="product.product_uom_unit"/>
<field eval="&quot;Membership 2007&quot;" name="name"/>
<field name="invoice_id" ref="account_invoice_2"/>
<field eval="160.0" name="price_unit"/>
<field eval="[(6,0,[ref('account_tax_testingtax0')])]" name="invoice_line_tax_id"/>
<field name="product_id" ref="product_product_2"/>
<field eval="1.0" name="quantity"/>
<field name="account_id" ref="account.a_sale"/>
</record>
</data>
</openerp>

View File

@ -484,6 +484,7 @@ class Product(osv.osv):
_defaults = {
'membership': False,
}
Product()
@ -501,6 +502,7 @@ class Invoice(osv.osv):
[l.id for l in invoice.invoice_line])])
member_line_obj.write(cr, uid, mlines, {'date_cancel': today})
return super(Invoice, self).action_cancel(cr, uid, ids)
Invoice()
class account_invoice_line(osv.osv):
@ -573,4 +575,5 @@ class account_invoice_line(osv.osv):
return result
account_invoice_line()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -23,7 +23,6 @@ from osv import fields, osv
import tools
import decimal_precision as dp
STATE = [
('none', 'Non Member'),
('canceled', 'Cancelled Member'),
@ -63,7 +62,7 @@ class report_membership(osv.osv):
'membership_state': fields.selection(STATE, 'Current Membership State', readonly=True),
'user_id': fields.many2one('res.users', 'Salesman', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True)
}
}
def init(self, cr):
'''Create the view'''
@ -127,20 +126,20 @@ class report_membership(osv.osv):
ml.state,
ml.id
) AS foo
GROUP BY
year,
month,
date_from,
date_to,
partner_id,
user_id,
membership_id,
company_id,
membership_state,
associate_member_id,
GROUP BY
year,
month,
date_from,
date_to,
partner_id,
user_id,
membership_id,
company_id,
membership_state,
associate_member_id,
membership_amount
)""")
report_membership()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,11 +19,7 @@
#
##############################################################################
import time
from osv import fields, osv
from tools.translate import _
import tools
import decimal_precision as dp
class membership_invoice(osv.osv_memory):
@ -35,7 +31,7 @@ class membership_invoice(osv.osv_memory):
'product_id': fields.many2one('product.product','Membership', required=True),
'member_price': fields.float('Member Price', digits_compute= dp.get_precision('Sale Price'), required=True),
}
def onchange_product(self, cr, uid, ids, product_id):
def onchange_product(self, cr, uid, ids, product_id=False):
"""This function returns value of product's member price based on product id.
"""
if not product_id:
@ -49,15 +45,14 @@ class membership_invoice(osv.osv_memory):
datas = {}
if not context:
context = {}
data = self.browse(cr, uid, ids)
data = self.browse(cr, uid, ids, context=context)
if data:
data = data[0]
datas = {
'membership_product_id': data.product_id.id,
'amount': data.member_price
}
invoice_ids = context.get('active_ids', [])
invoice_list = partner_obj.create_membership_invoice(cr, uid, invoice_ids, datas=datas, context=context)
invoice_list = partner_obj.create_membership_invoice(cr, uid, context.get('active_ids', []), datas=datas, context=context)
return {
'domain': [('id', 'in', invoice_list)],
@ -70,4 +65,4 @@ class membership_invoice(osv.osv_memory):
membership_invoice()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -26,6 +26,7 @@ from osv import osv, fields
from tools.translate import _
import netsvc
import time
import tools
#----------------------------------------------------------
@ -311,7 +312,7 @@ class mrp_bom(osv.osv):
mult = (d + (m and 1.0 or 0.0))
cycle = mult * wc_use.cycle_nbr
result2.append({
'name': bom.routing_id.name,
'name': tools.ustr(wc_use.name) + ' - ' + tools.ustr(bom.product_id.name),
'workcenter_id': wc.id,
'sequence': level+(wc_use.sequence or 0),
'cycle': cycle,

View File

@ -1,117 +0,0 @@
# German translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-08-20 08:40+0000\n"
"PO-Revision-Date: 2010-10-05 13:33+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-10-08 04:39+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid "Network error"
msgstr ""
#. module: partner_geo_assign
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: partner_geo_assign
#: help:res.partner,partner_weight:0
msgid ""
"Gives the probability to assign a lead to this partner. (0 means no "
"assignation.)"
msgstr ""
#. module: partner_geo_assign
#: model:ir.module.module,description:partner_geo_assign.module_meta_information
msgid ""
"\n"
"This is the module used by OpenERP SA to redirect customers to his "
"partners,\n"
"based on geolocalization.\n"
" "
msgstr ""
#. module: partner_geo_assign
#: field:res.partner,partner_weight:0
msgid "Weight"
msgstr ""
#. module: partner_geo_assign
#: model:ir.module.module,shortdesc:partner_geo_assign.module_meta_information
msgid "Partner Geo-Localisation"
msgstr ""
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localization"
msgstr ""
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid ""
"Could not contact geolocation servers, please make sure you have a working "
"internet connection (%s)"
msgstr ""
#. module: partner_geo_assign
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: partner_geo_assign
#: field:res.partner,date_localization:0
msgid "Geo Localization Date"
msgstr ""
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assign"
msgstr ""
#. module: partner_geo_assign
#: field:crm.lead,partner_latitude:0
#: field:res.partner,partner_latitude:0
msgid "Geo Latitude"
msgstr ""
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_crm_lead
msgid "crm.lead"
msgstr ""
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_res_partner
msgid "Partner"
msgstr ""
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assignation"
msgstr ""
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localize"
msgstr ""
#. module: partner_geo_assign
#: field:crm.lead,partner_longitude:0
#: field:res.partner,partner_longitude:0
msgid "Geo Longitude"
msgstr ""

View File

@ -1,116 +0,0 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * partner_geo_assign
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-08-20 08:40+0000\n"
"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-09-29 05:17+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid "Network error"
msgstr ""
#. module: partner_geo_assign
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: partner_geo_assign
#: help:res.partner,partner_weight:0
msgid ""
"Gives the probability to assign a lead to this partner. (0 means no "
"assignation.)"
msgstr ""
#. module: partner_geo_assign
#: model:ir.module.module,description:partner_geo_assign.module_meta_information
msgid ""
"\n"
"This is the module used by OpenERP SA to redirect customers to his "
"partners,\n"
"based on geolocalization.\n"
" "
msgstr ""
#. module: partner_geo_assign
#: field:res.partner,partner_weight:0
msgid "Weight"
msgstr ""
#. module: partner_geo_assign
#: model:ir.module.module,shortdesc:partner_geo_assign.module_meta_information
msgid "Partner Geo-Localisation"
msgstr ""
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localization"
msgstr ""
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid ""
"Could not contact geolocation servers, please make sure you have a working "
"internet connection (%s)"
msgstr ""
#. module: partner_geo_assign
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: partner_geo_assign
#: field:res.partner,date_localization:0
msgid "Geo Localization Date"
msgstr ""
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assign"
msgstr ""
#. module: partner_geo_assign
#: field:crm.lead,partner_latitude:0
#: field:res.partner,partner_latitude:0
msgid "Geo Latitude"
msgstr ""
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_crm_lead
msgid "crm.lead"
msgstr ""
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_res_partner
msgid "Partner"
msgstr ""
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assignation"
msgstr ""
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localize"
msgstr ""
#. module: partner_geo_assign
#: field:crm.lead,partner_longitude:0
#: field:res.partner,partner_longitude:0
msgid "Geo Longitude"
msgstr ""

View File

@ -1,128 +0,0 @@
# Italian translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2010-08-20 08:40+0000\n"
"PO-Revision-Date: 2010-09-29 09:26+0000\n"
"Last-Translator: OpenERP Administrators <Unknown>\n"
"Language-Team: Italian <it@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-09-30 04:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid "Network error"
msgstr "Errore di rete"
#. module: partner_geo_assign
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valido per Visualizzare l'architettura!"
#. module: partner_geo_assign
#: help:res.partner,partner_weight:0
msgid ""
"Gives the probability to assign a lead to this partner. (0 means no "
"assignation.)"
msgstr ""
"Fornisce la probabilità di assegnare una richesta a questo partner (0 "
"significa nessuna assegnazione)."
#. module: partner_geo_assign
#: model:ir.module.module,description:partner_geo_assign.module_meta_information
msgid ""
"\n"
"This is the module used by OpenERP SA to redirect customers to his "
"partners,\n"
"based on geolocalization.\n"
" "
msgstr ""
"\n"
"Questo è il modulo usato da OpenERP SA per indirizzare i venditori ai loro "
"partners,\n"
"basandosi sulla geolocalizzazione.\n"
" "
#. module: partner_geo_assign
#: field:res.partner,partner_weight:0
msgid "Weight"
msgstr "Peso"
#. module: partner_geo_assign
#: model:ir.module.module,shortdesc:partner_geo_assign.module_meta_information
msgid "Partner Geo-Localisation"
msgstr "Geo-Localizzazione Partner"
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localization"
msgstr "Geo-Localizzazione"
#. module: partner_geo_assign
#: code:addons/partner_geo_assign/partner_geo_assign.py:0
#, python-format
msgid ""
"Could not contact geolocation servers, please make sure you have a working "
"internet connection (%s)"
msgstr ""
"Non è possibile contattare i server per la geo-localizzaziome, per favore "
"assicurarsi di avere una connessione ad internet funzionante (%s)"
#. module: partner_geo_assign
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
"Il nome dell'oggetto deve iniziare per x_ e non deve contenere caratteri "
"speciali!"
#. module: partner_geo_assign
#: field:res.partner,date_localization:0
msgid "Geo Localization Date"
msgstr "Data Geo-localizzazione"
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assign"
msgstr "Geo assegnamento"
#. module: partner_geo_assign
#: field:crm.lead,partner_latitude:0
#: field:res.partner,partner_latitude:0
msgid "Geo Latitude"
msgstr "Geo Latitudine"
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_crm_lead
msgid "crm.lead"
msgstr "crm.lead"
#. module: partner_geo_assign
#: model:ir.model,name:partner_geo_assign.model_res_partner
msgid "Partner"
msgstr "Partner"
#. module: partner_geo_assign
#: view:crm.lead:0
msgid "Geo Assignation"
msgstr "Geo Assegnazione"
#. module: partner_geo_assign
#: view:res.partner:0
msgid "Geo Localize"
msgstr "Geo Localizzazione"
#. module: partner_geo_assign
#: field:crm.lead,partner_longitude:0
#: field:res.partner,partner_longitude:0
msgid "Geo Longitude"
msgstr "Geo Longitudine"

View File

@ -19,7 +19,7 @@
#
##############################################################################
import pos
import point_of_sale
import account_bank_statement
import wizard
import report

View File

@ -62,18 +62,18 @@ Main features :
'wizard/pos_payment.xml',
'wizard/pos_scan_product_view.xml',
'wizard/pos_return_view.xml',
'pos_report.xml',
'pos_view.xml',
'point_of_sale_report.xml',
'point_of_sale_view.xml',
'report/report_pos_order_view.xml',
'report/report_cash_register_view.xml',
'pos_sequence.xml',
'pos_workflow.xml',
'statement_view.xml',
'statement_report.xml',
'point_of_sale_sequence.xml',
'point_of_sale_workflow.xml',
'account_statement_view.xml',
'account_statement_report.xml',
],
'demo_xml': ['pos_demo.xml','singer_statement_demo.xml'],
'test':['test/pos_test.yml',
'test/pos_report.yml',
'demo_xml': ['point_of_sale_demo.xml','account_statement_demo.xml'],
'test': ['test/point_of_sale_test.yml',
'test/point_of_sale_report.yml',
],
'installable': True,
}

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 PC Solutions (<http://pcsol.be>). All Rights Reserved
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
@ -16,21 +16,19 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv
from osv import fields
from osv import fields, osv
class account_journal(osv.osv):
_inherit = 'account.journal'
_columns = {
'auto_cash': fields.boolean('Automatic Opening', help="This field authorize the automatic creation of the cashbox"),
'special_journal': fields.boolean('Special Journal', help="Will put all the orders in waiting status till being accepted"),
'check_dtls': fields.boolean('Check Details', help="This field authorize Validation of Cashbox without checking ending details"),
'journal_users': fields.many2many('res.users','pos_journal_users','journal_id','user_id','Users'),
'journal_users': fields.many2many('res.users', 'pos_journal_users', 'journal_id', 'user_id', 'Users'),
}
_defaults = {
'check_dtls': False,
@ -39,7 +37,7 @@ class account_journal(osv.osv):
account_journal()
class account_cash_statement(osv.osv):
_inherit = 'account.bank.statement'
def _equal_balance(self, cr, uid, cash_id, context=None):
@ -48,12 +46,11 @@ class account_cash_statement(osv.osv):
statement = self.browse(cr, uid, cash_id, context=context)
if not statement.journal_id.check_dtls:
return True
if statement.journal_id.check_dtls and (statement.balance_end != statement.balance_end_cash):
return False
else:
return True
return True
def _user_allow(self, cr, uid, statement_id, context=None):
if context is None:
context = {}
@ -62,12 +59,10 @@ class account_cash_statement(osv.osv):
statement = self.browse(cr, uid, statement_id, context=context)
for user in statement.journal_id.journal_users:
uids.append(user.id)
if uid in uids:
res = True
return res
def _get_cash_open_box_lines(self, cr, uid, context=None):
if context is None:
context = {}
@ -81,7 +76,7 @@ class account_cash_statement(osv.osv):
res.append(dct)
res.sort()
return res
def _get_default_cash_close_box_lines(self, cr, uid, context=None):
if context is None:
context = {}
@ -95,7 +90,7 @@ class account_cash_statement(osv.osv):
res.append(dct)
res.sort()
return res
account_cash_statement()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,6 +1,11 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="account.cash_journal" model="account.journal">
<field eval="[(6, 0, [ref('base.user_root')])]" name="journal_users"/>
</record>
<record id="account_invoice_invoicefrompospos0" model="account.invoice">
<field name="origin">POS/019</field>
<field name="reference">POS/019</field>

View File

@ -88,7 +88,7 @@
- name: statement
date: "2010-10-13"
type: customer
account_id: account_account_sales0
account_id: account_pos_account_sales
amount: 100
partner_id: base.res_partner_agrolait
period_id: account.period_5

View File

@ -3,42 +3,42 @@
-
I configure all details for the Customer, Salesman and Product, Account.
-
-
I create View Account Type.
-
-
!record {model: account.account.type, id: account_account_type_view0}:
close_method: none
code: View
name: View
sign: 1
-
-
I create Income Account Type.
-
-
!record {model: account.account.type, id: account_account_type_income0}:
close_method: unreconciled
code: Income
name: Income
sign: 1
-
-
I create Expense Account Type.
-
-
!record {model: account.account.type, id: account_account_type_expense0}:
close_method: unreconciled
code: Expense
name: Expense
sign: 1
-
-
I create Cash Account Type.
-
-
!record {model: account.account.type, id: account_account_type_cash0}:
close_method: balance
code: Cash
name: Cash
sign: 1
-
-
I create Minimal Chart Account.
-
!record {model: account.account, id: account_account_minimalchart0}:
-
!record {model: account.account, id: account_pos_account_minimalchart}:
code: '0'
company_id: base.main_company
currency_mode: current
@ -47,188 +47,188 @@
parent_right: 12
type: view
user_type: account_account_type_view0
-
-
I create Payable Account.
-
!record {model: account.account, id: account_account_payable1}:
-
!record {model: account.account, id: account_pos_account_payable}:
code: AP
company_id: base.main_company
currency_mode: current
name: Payable
parent_id: account_account_minimalchart0
parent_id: account_pos_account_minimalchart
parent_left: 2
parent_right: 3
reconcile: true
type: payable
user_type: account_account_type_expense0
-
-
I create Receivable Account.
-
!record {model: account.account, id: account_account_receivable0}:
-
!record {model: account.account, id: account_pos_account_receivable}:
code: AR
company_id: base.main_company
currency_mode: current
name: Receivable
parent_id: account_account_minimalchart0
parent_id: account_pos_account_minimalchart
parent_left: 4
parent_right: 5
reconcile: true
type: receivable
user_type: account_account_type_income0
-
-
I create Cash Account.
-
!record {model: account.account, id: account_account_cash0}:
-
!record {model: account.account, id: account_pos_account_cash}:
code: C
company_id: base.main_company
currency_mode: current
name: Cash
parent_id: account_account_minimalchart0
parent_id: account_pos_account_minimalchart
parent_left: 6
parent_right: 7
type: other
user_type: account_account_type_cash0
-
-
I create Purchases Account.
-
!record {model: account.account, id: account_account_purchases0}:
-
!record {model: account.account, id: account_pos_account_purchases}:
code: P
company_id: base.main_company
currency_mode: current
name: Purchases
parent_id: account_account_minimalchart0
parent_id: account_pos_account_minimalchart
parent_left: 8
parent_right: 9
type: other
user_type: account_account_type_expense0
-
-
I create Sales Account.
-
!record {model: account.account, id: account_account_sales0}:
-
!record {model: account.account, id: account_pos_account_sales}:
code: Sale
company_id: base.main_company
currency_mode: current
name: Sales
parent_id: account_account_minimalchart0
parent_id: account_pos_account_minimalchart
parent_left: 10
parent_right: 11
type: other
user_type: account_account_type_income0
-
-
I create Purchase Journal.
-
!record {model: account.journal, id: account_journal_purchasejournal0}:
-
!record {model: account.journal, id: account_pos_account_journal_purchasejournal}:
code: PUJ
company_id: base.main_company
default_credit_account_id: account_account_purchases0
default_debit_account_id: account_account_purchases0
default_credit_account_id: account_pos_account_purchases
default_debit_account_id: account_pos_account_purchases
name: Purchase Journal
sequence_id: account.sequence_purchase_journal
type: purchase
view_id: account.account_journal_view
-
-
I create Sale Journal.
-
!record {model: account.journal, id: account_journal_salejournal0}:
-
!record {model: account.journal, id: account_pos_account_journal_salejournal}:
code: SAJ
company_id: base.main_company
default_credit_account_id: account_account_sales0
default_debit_account_id: account_account_sales0
default_credit_account_id: account_pos_account_sales
default_debit_account_id: account_pos_account_sales
name: Sale Journal
sequence_id: account.sequence_sale_journal
type: sale
view_id: account.account_journal_view
-
-
I create Bank Journal.
-
!record {model: account.journal, id: account_journal_bankjournal0}:
-
!record {model: account.journal, id: account_pos_account_journal_bankjournal}:
code: BNK
company_id: base.main_company
default_credit_account_id: account_account_cash0
default_debit_account_id: account_account_cash0
default_credit_account_id: account_pos_account_cash
default_debit_account_id: account_pos_account_cash
name: Bank Journal
sequence_id: account.sequence_journal
type: cash
view_id: account.account_journal_bank_view
-
-
I create property for account payable.
-
-
!record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
company_id: base.main_company
fields_id: account.field_res_partner_property_account_payable
name: property_account_expense_categ
value_reference: account.account,5
-
-
I create property for account receivable.
-
-
!record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
company_id: base.main_company
fields_id: account.field_res_partner_property_account_receivable
name: property_account_income_categ
value_reference: account.account,6
-
-
I create Partner category Customers.
-
-
!record {model: res.partner.category, id: res_partner_category_customers0}:
name: Customers
-
I create partner
-
-
!record {model: res.partner, id: res_partner_cleartrail0}:
category_id:
- res_partner_category_customers0
name: Cleartrail
-
-
I create partner address.
-
-
!record {model: res.partner.address, id: res_partner_address_1}:
partner_id: res_partner_cleartrail0
street: onam plaza, 14 B palasia A B Road
type: contact
-
-
I create partner invoice address.
-
-
!record {model: res.partner.address, id: res_partner_address_2}:
partner_id: res_partner_cleartrail0
type: invoice
-
-
I create partner delivery address.
-
-
!record {model: res.partner.address, id: res_partner_address_3}:
partner_id: res_partner_cleartrail0
street: sangam house 15 B palasia, A B Road
type: delivery
-
I create product category.
-
I create product category.
-
!record {model: product.category, id: product_category_allproductssellable0}:
name: Mobile Products Sellable
-
I create partner.
-
-
!record {model: res.partner, id: res_partner_microlinktechnologies0}:
address:
- street: Kailash Vaibhav, Parksite
name: Micro Link Technologies
property_account_payable: account_account_payable1
property_account_receivable: account_account_receivable0
supplier: true
property_account_payable: account_pos_account_payable
property_account_receivable: account_pos_account_receivable
supplier: true
-
I create partner address .
-
-
!record {model: res.partner.address, id: res_partner_address_0}:
country_id: base.in
partner_id: res_partner_microlinktechnologies0
street: Ash House, Ash Road
title: base.res_partner_title_miss
-
-
I create product category .
-
-
!record {model: product.category, id: product_category_services0}:
name: Mobile Services
-
-
I create product template .
-
-
!record {model: product.template, id: product_template_lgviewtysmart0}:
categ_id: product_category_allproductssellable0
cost_method: standard
@ -241,9 +241,9 @@
type: product
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
-
-
I create product LG Viewty Smart.
-
-
!record {model: product.product, id: product_product_lgviewtysmart0}:
categ_id: product_category_allproductssellable0
cost_method: standard
@ -251,22 +251,22 @@
mes_type: fixed
name: LG Viewty Smart
procure_method: make_to_order
property_account_expense: account_account_payable1
property_account_income: account_account_receivable0
property_account_expense: account_pos_account_payable
property_account_income: account_pos_account_receivable
seller_delay: '1'
standard_price: 160.0
supply_method: produce
type: product
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
-
I create product category .
-
I create product category .
-
!record {model: product.category, id: product_category_computer0}:
name: Computer
-
-
I create product HP Pavilion Desktop PCs
-
-
!record {model: product.product, id: product_product_hppaviliondesktoppcs0}:
categ_id: product_category_computer0
cost_method: standard
@ -282,9 +282,9 @@
type: product
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
property_account_expense: account_account_payable1
property_account_income: account_account_receivable0
-
property_account_expense: account_pos_account_payable
property_account_income: account_pos_account_receivable
-
I create New Order by adding the details of Salesman and "Product" as LG Viewty Smart Quantity as 10.
-
!record {model: pos.order, id: pos_order_pos0}:

View File

@ -19,40 +19,30 @@
#
##############################################################################
import netsvc
from osv import osv,fields
from tools.translate import _
import time
from osv import osv
class all_closed_cashbox_of_the_day(osv.osv_memory):
_name = 'all.closed.cashbox.of.the.day'
_description = 'All closed cashbox of the day'
_columns = {
}
def print_report(self, cr, uid, ids, context=None):
"""
To get the date and print the report
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return : retrun report
"""
datas = {'ids' : context.get('active_ids',[])}
datas = {'ids': context.get('active_ids', [])}
res = {}
datas['form'] = res
return {
'type' : 'ir.actions.report.xml',
'report_name':'all.closed.cashbox.of.the.day',
'datas' : datas,
'type': 'ir.actions.report.xml',
'report_name': 'all.closed.cashbox.of.the.day',
'datas': datas,
}
all_closed_cashbox_of_the_day()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -32,10 +32,10 @@ class add_product(osv.osv_memory):
'quantity': fields.float('Quantity', required=True),
}
_defaults = {
'quantity': lambda *a: 1,
'quantity': 1,
}
def select_product(self, cr, uid, ids, context):
def select_product(self, cr, uid, ids, context=None):
"""
To get the product and quantity and add in order .
@param self: The object pointer.
@ -44,13 +44,14 @@ class add_product(osv.osv_memory):
@param context: A standard dictionary
@return : Return the add product form again for adding more product
"""
if context is None:
context = {}
this = self.browse(cr, uid, ids[0], context=context)
record_id = context and context.get('active_id', False)
assert record_id, _('Active ID is not found')
if record_id:
order_obj = self.pool.get('pos.order')
order_obj.add_product(cr, uid, record_id, this.product_id.id, this.quantity, context=context)
return {
'name': _('Add Product'),
'view_type': 'form',
@ -61,34 +62,36 @@ class add_product(osv.osv_memory):
'views': False,
'type': 'ir.actions.act_window',
}
def close_action(self, cr, uid, ids, context):
def close_action(self, cr, uid, ids, context=None):
"""
To get the product and Make the payment .
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return : Return the Make Payment
@return : Return the Make Payment
"""
if context is None:
context = {}
record_id = context and context.get('active_id', False)
order_obj= self.pool.get('pos.order')
obj=order_obj.browse(cr, uid, record_id)
order_obj.write(cr, uid, [record_id], {'state':'done'})
obj = order_obj.browse(cr, uid, record_id, context=context)
order_obj.write(cr, uid, [record_id], {'state': 'done'}, context=context)
if obj.amount_total != obj.amount_paid:
return {
'name': _('Make Payment'),
'context ':context and context.get('active_id', False),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'pos.make.payment',
'view_id': False,
'target': 'new',
'views': False,
'type': 'ir.actions.act_window',
'name': _('Make Payment'),
'context': context and context.get('active_id', False),
'view_type': 'form',
'view_mode': 'form',
'res_model': 'pos.make.payment',
'view_id': False,
'target': 'new',
'views': False,
'type': 'ir.actions.act_window',
}
return {}
return {}
add_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -19,30 +19,31 @@
#
##############################################################################
from osv import osv, fields
import time
from osv import osv, fields
from tools.translate import _
def get_journal(self, cr, uid, context):
def get_journal(self, cr, uid, context=None):
"""
Make the selection list of Cash Journal .
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return :Return the list of journal
Make the selection list of Cash Journal .
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param context: A standard dictionary
@return :Return the list of journal
"""
obj = self.pool.get('account.journal')
journal_obj = self.pool.get('account.journal')
statement_obj = self.pool.get('account.bank.statement')
cr.execute("SELECT DISTINCT journal_id from pos_journal_users where user_id=%s order by journal_id", (uid,))
cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users WHERE user_id = %s ORDER BY journal_id", (uid, ))
j_ids = map(lambda x1: x1[0], cr.fetchall())
ids = 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]
res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context)
ids = journal_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
obj_ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', ids)], context=context)
res_obj = journal_obj.read(cr, uid, ids, ['journal_id'], context=context)
res_obj = [(r1['id']) for r1 in res_obj]
res = statement_obj.read(cr, uid, obj_ids, ['journal_id'], context=context)
res = [(r['journal_id']) for r in res]
res.insert(0, ('', ''))
return res
@ -51,10 +52,7 @@ class pos_box_entries(osv.osv_memory):
_name = 'pos.box.entries'
_description = 'Pos Box Entries'
def _get_income_product(self, cr, uid, context):
def _get_income_product(self, cr, uid, context=None):
"""
Make the selection list of purchasing products.
@param self: The object pointer.
@ -63,10 +61,10 @@ class pos_box_entries(osv.osv_memory):
@param context: A standard dictionary
@return :Return of operation of product
"""
obj = self.pool.get('product.product')
ids = obj.search(cr, uid, [('income_pdt', '=', True)])
res = obj.read(cr, uid, ids, ['id', 'name'], context)
res = [(r['id'],r['name']) for r in res]
product_obj = self.pool.get('product.product')
ids = product_obj.search(cr, uid, [('income_pdt', '=', True)], context=context)
res = product_obj.read(cr, uid, ids, ['id', 'name'], context=context)
res = [(r['id'], r['name']) for r in res]
res.insert(0, ('', ''))
return res
@ -80,11 +78,11 @@ class pos_box_entries(osv.osv_memory):
'ref': fields.char('Ref', size=32),
}
_defaults = {
'journal_id': lambda *a: 1,
'product_id': lambda *a: 1,
'journal_id': 1,
'product_id': 1,
}
def get_in(self, cr, uid, ids, context):
def get_in(self, cr, uid, ids, context=None):
"""
Create the entry of statement in journal.
@param self: The object pointer.
@ -94,14 +92,13 @@ class pos_box_entries(osv.osv_memory):
@return :Return of operation of product
"""
statement_obj = self.pool.get('account.bank.statement')
product_obj = self.pool.get('product.template')
res_obj = self.pool.get('res.users')
product_obj = self.pool.get('product.product')
bank_statement = self.pool.get('account.bank.statement.line')
for data in self.read(cr, uid, ids):
args = {}
curr_company = res_obj.browse(cr, uid, uid).company_id.id
statement_id = statement_obj.search(cr, uid, [('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')])
for data in self.read(cr, uid, ids, context=context):
vals = {}
curr_company = res_obj.browse(cr, uid, uid, context=context).company_id.id
statement_id = statement_obj.search(cr, uid, [('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')], context=context)
if not statement_id:
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
@ -116,22 +113,20 @@ class pos_box_entries(osv.osv_memory):
'journal_id': data['journal_id'],
'company_id': curr_company,
'user_id': uid,
})
}, context=context)
args['statement_id'] = statement_id
args['journal_id'] = data['journal_id']
vals['statement_id'] = statement_id
valss['journal_id'] = data['journal_id']
if acc_id:
args['account_id'] = acc_id.id
args['amount'] = data['amount'] or 0.0
args['ref'] = "%s" % (data['ref'] or '')
args['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id']).name, data['name'].decode('utf8'))
address_u = res_obj.browse(cr, uid, uid).address_id
vals['account_id'] = acc_id.id
vals['amount'] = data['amount'] or 0.0
vals['ref'] = "%s" % (data['ref'] or '')
vals['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id'], context=context).name, data['name'].decode('utf8'))
address_u = res_obj.browse(cr, uid, uid, context=context).address_id
if address_u:
partner_id = address_u.partner_id and address_u.partner_id.id or None
args['partner_id'] = partner_id
bank_statement.create(cr, uid, args)
return {}
vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
bank_statement.create(cr, uid, vals, context=context)
return {}
pos_box_entries()

View File

@ -19,20 +19,19 @@
#
##############################################################################
from osv import osv, fields
import time
from tools.translate import _
from datetime import datetime
from dateutil.relativedelta import relativedelta
import pos_box_entries
from osv import osv, fields
from tools.translate import _
import pos_box_entries
class pos_box_out(osv.osv_memory):
_name = 'pos.box.out'
_description = 'Pos Box Out'
def _get_expense_product(self, cr, uid, context):
def _get_expense_product(self, cr, uid, context=None):
"""
Make the selection list of expense product.
@param self: The object pointer.
@ -41,10 +40,10 @@ class pos_box_out(osv.osv_memory):
@param context: A standard dictionary
@return :Return of operation of product
"""
obj = self.pool.get('product.product')
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
ids = obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)])
res = obj.read(cr, uid, ids, ['id', 'name'], context)
product_obj = self.pool.get('product.product')
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
ids = product_obj.search(cr, uid, ['&', ('expense_pdt', '=', True), '|', ('company_id', '=', company_id), ('company_id', '=', None)], context=context)
res = product_obj.read(cr, uid, ids, ['id', 'name'], context=context)
res = [(r['id'], r['name']) for r in res]
res.insert(0, ('', ''))
return res
@ -57,10 +56,10 @@ class pos_box_out(osv.osv_memory):
'ref': fields.char('Ref', size=32),
}
_defaults = {
'journal_id': lambda *a: 1,
'product_id': lambda *a: 1,
'journal_id': 1,
'product_id': 1,
}
def get_out(self, cr, uid, ids, context):
def get_out(self, cr, uid, ids, context=None):
"""
Create the entries in the CashBox .
@ -70,34 +69,34 @@ class pos_box_out(osv.osv_memory):
@param context: A standard dictionary
@return :Return of operation of product
"""
args = {}
vals = {}
statement_obj = self.pool.get('account.bank.statement')
statement_line_obj = self.pool.get('account.bank.statement.line')
product_obj = self.pool.get('product.template')
productp_obj = self.pool.get('product.product')
res_obj = self.pool.get('res.users')
for data in self.read(cr, uid, ids):
curr_company = res_obj.browse(cr, uid, uid).company_id.id
statement_id = statement_obj.search(cr, uid, [('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')])
for data in self.read(cr, uid, ids, context=context):
curr_company = res_obj.browse(cr, uid, uid, context=context).company_id.id
statement_id = statement_obj.search(cr, uid, [('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid), ('state', '=', 'open')], context=context)
monday = (datetime.today() + relativedelta(weekday=0)).strftime('%Y-%m-%d')
sunday = (datetime.today() + relativedelta(weekday=6)).strftime('%Y-%m-%d')
done_statmt = statement_obj.search(cr, uid, [('date', '>=', monday+' 00:00:00'), ('date', '<=', sunday+' 23:59:59'), ('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid)])
stat_done = statement_obj.browse(cr, uid, done_statmt)
address_u = res_obj.browse(cr, uid, uid).address_id
done_statmt = statement_obj.search(cr, uid, [('date', '>=', monday+' 00:00:00'), ('date', '<=', sunday+' 23:59:59'), ('journal_id', '=', data['journal_id']), ('company_id', '=', curr_company), ('user_id', '=', uid)], context=context)
stat_done = statement_obj.browse(cr, uid, done_statmt, context=context)
address_u = res_obj.browse(cr, uid, uid, context=context).address_id
am = 0.0
amount_check = productp_obj.browse(cr, uid, data['product_id']).am_out or False
amount_check = productp_obj.browse(cr, uid, data['product_id'], context=context).am_out or False
for st in stat_done:
for s in st.line_ids:
if address_u and s.partner_id == address_u.partner_id and s.am_out:
am += s.amount
if (-data['amount'] or 0.0) + am < -(res_obj.browse(cr, uid, uid).company_id.max_diff or 0.0) and amount_check:
if (-data['amount'] or 0.0) + am < -(res_obj.browse(cr, uid, uid, context=context).company_id.max_diff or 0.0) and amount_check:
val = (res_obj.browse(cr, uid, uid).company_id.max_diff or 0.0) + am
raise osv.except_osv(_('Error !'), _('The maximum value you can still withdraw is exceeded. \n Remaining value is equal to %d ')%(val))
acc_id = product_obj.browse(cr, uid, data['product_id']).property_account_income
acc_id = product_obj.browse(cr, uid, data['product_id'], context=context).property_account_income
if not acc_id:
raise osv.except_osv(_('Error !'), _('please check that account is set to %s')%(product_obj.browse(cr, uid, data['product_id']).name))
raise osv.except_osv(_('Error !'), _('please check that account is set to %s')%(product_obj.browse(cr, uid, data['product_id'], context=context).name))
if not statement_id:
raise osv.except_osv(_('Error !'), _('You have to open at least one cashbox'))
if statement_id:
@ -108,24 +107,23 @@ class pos_box_out(osv.osv_memory):
'journal_id': data['journal_id'],
'company_id': curr_company,
'user_id': uid,
})
args['statement_id'] = statement_id
args['journal_id'] = data['journal_id']
}, context=context)
vals['statement_id'] = statement_id
vals['journal_id'] = data['journal_id']
if acc_id:
args['account_id'] = acc_id.id
vals['account_id'] = acc_id.id
amount = data['amount'] or 0.0
if data['amount'] > 0:
amount = -data['amount']
args['amount'] = amount
if productp_obj.browse(cr, uid, data['product_id']).am_out:
args['am_out'] = True
args['ref'] = data['ref'] or ''
args['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id']).name, data['name'].decode('utf8'))
address_u = res_obj.browse(cr, uid, uid).address_id
vals['amount'] = amount
if productp_obj.browse(cr, uid, data['product_id'], context=context).am_out:
vals['am_out'] = True
vals['ref'] = data['ref'] or ''
vals['name'] = "%s: %s " % (product_obj.browse(cr, uid, data['product_id'], context=context).name, data['name'].decode('utf8'))
address_u = res_obj.browse(cr, uid, uid, context=context).address_id
if address_u:
partner_id = address_u.partner_id and address_u.partner_id.id or None
args['partner_id'] = partner_id
statement_line_id = statement_line_obj.create(cr, uid, args)
vals['partner_id'] = address_u.partner_id and address_u.partner_id.id or None
statement_line_id = statement_line_obj.create(cr, uid, vals, context=context)
return {}
pos_box_out()

View File

@ -26,7 +26,7 @@ class pos_close_statement(osv.osv_memory):
_name = 'pos.close.statement'
_description = 'Close Statements'
def close_statement(self, cr, uid, ids, context):
def close_statement(self, cr, uid, ids, context=None):
"""
Close the statements
@param self: The object pointer.
@ -39,34 +39,33 @@ class pos_close_statement(osv.osv_memory):
statement_obj = self.pool.get('account.bank.statement')
journal_obj = self.pool.get('account.journal')
cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
"WHERE user_id=%s ORDER BY journal_id", (uid,))
"WHERE user_id=%s ORDER BY journal_id", (uid, ))
j_ids = map(lambda x1: x1[0], cr.fetchall())
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)])
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):
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', 'in', journal_ids)], context=context)
for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
if not ids:
raise osv.except_osv(_('Message'), _('Cash registers are already closed.'))
else:
if not journal.check_dtls:
statement_obj.button_confirm_cash(cr, uid, ids, context)
statement_obj.button_confirm_cash(cr, uid, ids, context=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')
id2 = mod_obj._get_id(cr, uid, 'account', 'view_bank_statement_tree')
id3 = mod_obj._get_id(cr, uid, 'account', 'view_bank_statement_form2')
result = mod_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
id2 = mod_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
id3 = mod_obj.browse(cr, uid, id3, context=context).res_id
return {
'domain': "[('id','in'," + str(ids) + ")]",
'domain': "[('id', 'in', " + str(ids) + ")]",
'name': 'Close Statements',
'view_type': 'form',
'view_mode': 'tree,form',
'view_mode': 'tree, form',
'search_view_id': search_id['res_id'],
'res_model': 'account.bank.statement',
'views': [(id2, 'tree'),(id3, 'form')],
'views': [(id2, 'tree'), (id3, 'form')],
'type': 'ir.actions.act_window'
}

View File

@ -28,7 +28,7 @@ class pos_confirm(osv.osv_memory):
_name = 'pos.confirm'
_description = 'Point of Sale Confirm'
def action_confirm(self, cr, uid, ids, context):
def action_confirm(self, cr, uid, ids, context=None):
"""
Confirm the order and close the sales.
@param self: The object pointer.
@ -37,7 +37,8 @@ class pos_confirm(osv.osv_memory):
@param context: A standard dictionary
@return :Blank dictionary
"""
if context is None:
context = {}
record_id = context and context.get('active_id', False)
if record_id:
if isinstance(record_id, (int, long)):
@ -47,7 +48,7 @@ class pos_confirm(osv.osv_memory):
for order_id in order_obj.browse(cr, uid, record_id, context=context):
if order_id.state == 'paid':
order_obj.write(cr, uid, [order_id.id], {'journal_entry': True})
order_obj.write(cr, uid, [order_id.id], {'journal_entry': True}, context=context)
order_obj.create_account_move(cr, uid, [order_id.id], context=context)
wf_service = netsvc.LocalService("workflow")

View File

@ -19,9 +19,10 @@
#
##############################################################################
import time
from osv import osv, fields
from tools.translate import _
import time
class pos_details(osv.osv_memory):
@ -33,11 +34,11 @@ class pos_details(osv.osv_memory):
'date_end': fields.date('Date End', required=True)
}
_defaults = {
'date_start': lambda *a: time.strftime('%Y-%m-%d'),
'date_end': lambda *a: time.strftime('%Y-%m-%d'),
'date_start': time.strftime('%Y-%m-%d'),
'date_end': time.strftime('%Y-%m-%d'),
}
def print_report(self, cr, uid, ids, context={}):
def print_report(self, cr, uid, ids, context=None):
"""
To get the date and print the report
@param self: The object pointer.
@ -46,12 +47,12 @@ class pos_details(osv.osv_memory):
@param context: A standard dictionary
@return : retrun report
"""
if context is None:
context = {}
datas = {'ids': context.get('active_ids', [])}
res = self.read(cr, uid, ids, ['date_start', 'date_end'], context)
res = self.read(cr, uid, ids, ['date_start', 'date_end'], context=context)
res = res and res[0] or {}
datas['form'] = res
return {
'type': 'ir.actions.report.xml',
'report_name': 'pos.details',

View File

@ -32,7 +32,7 @@ class pos_discount(osv.osv_memory):
'discount_notes': fields.char('Discount Notes', size= 128, required=True),
}
_defaults = {
'discount': lambda *a: 5,
'discount': 5,
}
@ -47,11 +47,11 @@ class pos_discount(osv.osv_memory):
"""
res = super(pos_discount, self).view_init(cr, uid, fields_list, context=context)
record_id = context and context.get('active_id', False) or False
order = self.pool.get('pos.order').browse(cr, uid, record_id)
order = self.pool.get('pos.order').browse(cr, uid, record_id, context=context)
if not order.lines:
raise osv.except_osv('Error!','No Order Lines ')
True
def apply_discount(self, cr, uid, ids, context):
def apply_discount(self, cr, uid, ids, context=None):
"""
To give the discount of product and check the.
@ -61,16 +61,16 @@ class pos_discount(osv.osv_memory):
@param context: A standard dictionary
@return : nothing
"""
order_ref = self.pool.get('pos.order')
order_line_ref = self.pool.get('pos.order.line')
if context is None:
context = {}
this = self.browse(cr, uid, ids[0], context=context)
record_id = context and context.get('active_id', False)
if isinstance(record_id, (int, long)):
record_id = [record_id]
order_ref = self.pool.get('pos.order')
order_line_ref = self.pool.get('pos.order.line')
for order in order_ref.browse(cr, uid, record_id, context=context):
for line in order.lines:
company_discount = order.company_id.company_discount
applied_discount = this.discount
@ -81,10 +81,7 @@ class pos_discount(osv.osv_memory):
notice = 'Minimum Discount'
else:
notice = this.discount_notes
res_new = {
}
res_new = {}
if this.discount <= company_discount:
res_new = {
'discount': this.discount,

View File

@ -28,10 +28,10 @@ class pos_get_sale(osv.osv_memory):
_description = 'Get From Sale'
_columns = {
'picking_id': fields.many2one('stock.picking', 'Sale Order', domain=[('state', 'in', ('assigned', 'confirmed')), ('type', '=', 'out')], context="{'contact_display':'partner'}", required=True),
'picking_id': fields.many2one('stock.picking', 'Sale Order', domain=[('state', 'in', ('assigned', 'confirmed')), ('type', '=', 'out')], context="{'contact_display': 'partner'}", required=True),
}
def sale_complete(self, cr, uid, ids, context):
def sale_complete(self, cr, uid, ids, context=None):
"""
Select the picking order and add the in Point of sale order
@param self: The object pointer.
@ -40,29 +40,29 @@ class pos_get_sale(osv.osv_memory):
@param context: A standard dictionary
@return : nothing
"""
this = self.browse(cr, uid, ids[0], context=context)
record_id = context and context.get('active_id', False)
proxy_pos = self.pool.get('pos.order')
proxy_pick = self.pool.get('stock.picking')
proxy_order_line = self.pool.get('pos.order.line')
if context is None:
context = {}
this = self.browse(cr, uid, ids[0], context=context)
record_id = context and context.get('active_id', False)
if record_id:
order = proxy_pos.browse(cr, uid, record_id, context)
order = proxy_pos.browse(cr, uid, record_id, context=context)
if order.state in ('paid', 'invoiced'):
raise osv.except_osv(_('UserError '), _("You can't modify this order. It has already been paid"))
for pick in proxy_pick.browse(cr, uid, [this.picking_id.id], context):
for pick in proxy_pick.browse(cr, uid, [this.picking_id.id], context=context):
proxy_pos.write(cr, uid, record_id, {
'picking_id': this.picking_id.id,
'partner_id': pick.address_id and pick.address_id.partner_id.id
})
}, context=context)
order = proxy_pick.write(cr, uid, [this.picking_id.id], {
'invoice_state': 'none',
'pos_order': record_id
})
}, context=context)
for line in pick.move_lines:
proxy_order_line.create(cr, uid, {
@ -72,8 +72,7 @@ class pos_get_sale(osv.osv_memory):
'product_id': line.product_id.id,
'price_unit': line.sale_line_id.price_unit,
'discount': line.sale_line_id.discount,
})
}, context=context)
return {}
pos_get_sale()

View File

@ -26,7 +26,7 @@ class pos_open_statement(osv.osv_memory):
_name = 'pos.open.statement'
_description = 'Open Statements'
def open_statement(self, cr, uid, ids, context):
def open_statement(self, cr, uid, ids, context=None):
"""
Open the statements
@param self: The object pointer.
@ -37,20 +37,20 @@ class pos_open_statement(osv.osv_memory):
"""
data = {}
mod_obj = self.pool.get('ir.model.data')
company_id = self.pool.get('res.users').browse(cr, uid, uid).company_id.id
statement_obj = self.pool.get('account.bank.statement')
sequence_obj = self.pool.get('ir.sequence')
journal_obj = self.pool.get('account.journal')
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
"WHERE user_id=%s ORDER BY journal_id"% (uid,))
"WHERE user_id = %s ORDER BY journal_id"% (uid, ))
j_ids = map(lambda x1: x1[0], cr.fetchall())
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)])
journal_ids = journal_obj.search(cr, uid, [('auto_cash', '=', True), ('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
for journal in journal_obj.browse(cr, uid, journal_ids):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)])
for journal in journal_obj.browse(cr, uid, journal_ids, context=context):
ids = statement_obj.search(cr, uid, [('state', '!=', 'confirm'), ('user_id', '=', uid), ('journal_id', '=', journal.id)], context=context)
if len(ids):
raise osv.except_osv(_('Message'), _('You can not open a Cashbox for "%s".\nPlease close its related cash register.' %(journal.name)))
number = ''
if journal.sequence_id:
number = sequence_obj.get_id(cr, uid, journal.sequence_id.id)
@ -62,27 +62,26 @@ class pos_open_statement(osv.osv_memory):
'user_id': uid,
'state': 'draft',
'name': number })
statement_id = statement_obj.create(cr, uid, data)
statement_id = statement_obj.create(cr, uid, data, context=context)
statement_obj.button_open(cr, uid, [statement_id], 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_open_cash_statement_filter')
id2 = mod_obj._get_id(cr, uid, 'account', 'view_bank_statement_tree')
id3 = mod_obj._get_id(cr, uid, 'account', 'view_bank_statement_form2')
result = mod_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
id2 = mod_obj.browse(cr, uid, id2, context=context).res_id
if id3:
id3 = data_obj.browse(cr, uid, id3, context=context).res_id
id3 = mod_obj.browse(cr, uid, id3, context=context).res_id
return {
'domain': "[('state','=','open'),('user_id','=',"+ str(uid) +")]",
'domain': "[('state', '=', 'open'),('user_id', '=', "+ str(uid) +")]",
'name': 'Open Statement',
'view_type': 'form',
'view_mode': 'tree,form',
'view_mode': 'tree, form',
'search_view_id': search_id['res_id'],
'res_model': 'account.bank.statement',
'views': [(id2, 'tree'),(id3, 'form')],
'views': [(id2, 'tree'), (id3, 'form')],
'context': {'search_default_open': 1},
'type': 'ir.actions.act_window'
}

View File

@ -19,16 +19,18 @@
#
##############################################################################
from osv import osv,fields
import time
from osv import osv, fields
from tools.translate import _
import pos_box_entries
import time
class pos_make_payment(osv.osv_memory):
_name = 'pos.make.payment'
_description = 'Point of Sale Payment'
def default_get(self, cr, uid, fields, context):
def default_get(self, cr, uid, fields, context=None):
"""
To get default values for the object.
@param self: The object pointer.
@ -38,40 +40,40 @@ class pos_make_payment(osv.osv_memory):
@param context: A standard dictionary
@return: A dictionary which of fields with values.
"""
if context is None:
context = {}
j_obj = self.pool.get('account.journal')
order_obj=self.pool.get('pos.order')
res = super(pos_make_payment, self).default_get(cr, uid, fields, context=context)
active_id = context and context.get('active_id',False)
active_id = context and context.get('active_id', False)
if active_id:
j_obj = self.pool.get('account.journal')
cr.execute("SELECT DISTINCT journal_id FROM pos_journal_users "
"WHERE user_id=%d ORDER BY journal_id"% (uid,))
"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)])
journal = j_obj.search(cr, uid, [('type', '=', 'cash'), ('id', 'in', j_ids)], context=context)
journal = journal and journal[0] or False
order_obj=self.pool.get('pos.order')
order = order_obj.browse(cr, uid, active_id, context)
order = order_obj.browse(cr, uid, active_id, context=context)
#get amount to pay
amount = order.amount_total - order.amount_paid
if amount <= 0.0:
context.update({'flag': True})
order_obj.action_paid(cr, uid, [active_id], context)
elif order.amount_paid > 0.0:
order_obj.write(cr, uid, [active_id], {'state': 'advance'})
order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
invoice_wanted_checked = False
current_date = time.strftime('%Y-%m-%d')
if 'journal' in fields:
res.update({'journal':journal})
res.update({'journal': journal})
if 'amount' in fields:
res.update({'amount':amount})
res.update({'amount': amount})
if 'invoice_wanted' in fields:
res.update({'invoice_wanted':invoice_wanted_checked})
res.update({'invoice_wanted': invoice_wanted_checked})
if 'payment_date' in fields:
res.update({'payment_date':current_date})
res.update({'payment_date': current_date})
if 'payment_name' in fields:
res.update({'payment_name':'Payment'})
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:
@ -82,7 +84,7 @@ class pos_make_payment(osv.osv_memory):
super(pos_make_payment, self).view_init(cr, uid, fields_list, context=context)
active_id = context and context.get('active_id', False) or False
if active_id:
order = self.pool.get('pos.order').browse(cr, uid, active_id)
order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
if not order.lines:
raise osv.except_osv(_('Error!'),_('No order lines defined for this sale '))
return True
@ -99,15 +101,15 @@ class pos_make_payment(osv.osv_memory):
@return: New arch of view.
"""
result = super(pos_make_payment, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
if context is None:
context = {}
active_model = context.get('active_model')
active_id = context.get('active_id', False)
if not active_id or (active_model and active_model != 'pos.order'):
return result
order = self.pool.get('pos.order').browse(cr, uid, active_id)
order = self.pool.get('pos.order').browse(cr, uid, active_id, context=context)
if order.amount_total == order.amount_paid:
result['arch'] = """ <form string="Make Payment" colspan="4">
<group col="2" colspan="2">
@ -132,26 +134,25 @@ class pos_make_payment(osv.osv_memory):
amount = amount - product.list_price
return {'value': {'amount': amount}}
def check(self, cr, uid, ids, context):
def check(self, cr, uid, ids, context=None):
"""Check the order:
if the order is not paid: continue payment,
if the order is paid print invoice (if wanted) or ticket.
"""
active_id = context and context.get('active_id',False)
order_obj = self.pool.get('pos.order')
active_id = context and context.get('active_id', False)
order = order_obj.browse(cr, uid, active_id, context)
amount = order.amount_total - order.amount_paid
data = self.read(cr, uid, ids)[0]
data = self.read(cr, uid, ids, context=context)[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.write(cr, uid, [active_id], {'invoice_wanted': invoice_wanted, 'partner_id': data['partner_id']}, context=context)
order_obj.add_payment(cr, uid, active_id, data, context=context)
if order_obj.test_paid(cr, uid, [active_id]):
@ -159,33 +160,33 @@ class pos_make_payment(osv.osv_memory):
order_obj.action_invoice(cr, uid, [active_id], context)
order_obj.create_picking(cr, uid, [active_id], context)
if context.get('return'):
order_obj.write(cr, uid, [active_id],{'state':'done'})
order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
else:
order_obj.write(cr, uid, [active_id],{'state':'paid'})
order_obj.write(cr, uid, [active_id],{'state':'paid'}, context=context)
return self.create_invoice(cr, uid, ids, context)
else:
context.update({'flag': True})
order_obj.action_paid(cr, uid, [active_id], context)
if context.get('return'):
order_obj.write(cr, uid, [active_id],{'state':'done'})
order_obj.write(cr, uid, [active_id], {'state':'done'}, context=context)
else:
order_obj.write(cr, uid, [active_id],{'state':'paid'})
order_obj.write(cr, uid, [active_id], {'state':'paid'}, context=context)
return self.print_report(cr, uid, ids, context)
if order.amount_paid > 0.0:
context.update({'flag': True})
# Todo need to check
order_obj.action_paid(cr, uid, [active_id], context)
order_obj.write(cr, uid, [active_id],{'state': 'advance'})
order_obj.write(cr, uid, [active_id], {'state': 'advance'}, context=context)
return self.print_report(cr, uid, ids, context)
return {}
def create_invoice(self, cr, uid, ids, context):
def create_invoice(self, cr, uid, ids, context=None):
"""
Create a invoice
"""
active_ids = [context and context.get('active_id',False)]
active_ids = [context and context.get('active_id', False)]
datas = {'ids': active_ids}
datas['form'] = {}
return {
@ -204,12 +205,11 @@ class pos_make_payment(osv.osv_memory):
@return : retrun report
"""
if not context:
context={}
active_id=context.get('active_id',[])
context = {}
active_id = context.get('active_id', [])
datas = {'ids' : [active_id]}
res = {}
datas['form'] = res
return {
'type': 'ir.actions.report.xml',
'report_name': 'pos.receipt',
@ -217,14 +217,14 @@ class pos_make_payment(osv.osv_memory):
}
_columns = {
'journal':fields.selection(pos_box_entries.get_journal, "Cash Register",required=True),
'journal': fields.selection(pos_box_entries.get_journal, "Cash Register", required=True),
'product_id': fields.many2one('product.product', "Advance"),
'amount':fields.float('Amount', digits=(16,2) ,required= True),
'amount': fields.float('Amount', digits=(16,2) ,required= True),
'payment_name': fields.char('Payment name', size=32, required=True),
'payment_date': fields.date('Payment date', required=True),
'is_acc': fields.boolean('Advance'),
'invoice_wanted': fields.boolean('Invoice'),
'num_sale':fields.char('Num.File', size=32),
'num_sale': fields.char('Num.File', size=32),
'pricelist_id': fields.many2one('product.pricelist', 'Pricelist'),
'partner_id': fields.many2one('res.partner', 'Customer'),
}

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,20 +15,18 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv
from tools.translate import _
class pos_payment_report(osv.osv_memory):
_name = 'pos.payment.report'
_description = 'Payment Report'
def print_report(self, cr, uid, ids, context={}):
def print_report(self, cr, uid, ids, context=None):
"""
To get the date and print the report
@param self: The object pointer.
@ -37,7 +35,8 @@ class pos_payment_report(osv.osv_memory):
@param context: A standard dictionary
@return : retrun report
"""
if context is None:
context = {}
datas = {'ids': context.get('active_ids', [])}
return {
'type': 'ir.actions.report.xml',

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,20 +15,21 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import time
from osv import osv
from osv import fields
import time
class pos_payment_report_date(osv.osv_memory):
_name = 'pos.payment.report.date'
_description = 'POS Payment Report according to date'
def print_report(self, cr, uid, ids, context=None):
def print_report(self, cr, uid, ids, context=None):
"""
To get the date and print the report
@param self: The object pointer.
@ -37,8 +38,10 @@ class pos_payment_report_date(osv.osv_memory):
@param context: A standard dictionary
@return : retrun report
"""
if context is None:
context = {}
datas = {'ids': context.get('active_ids', [])}
res = self.read(cr, uid, ids, ['date_start', 'date_end', 'user_id'])
res = self.read(cr, uid, ids, ['date_start', 'date_end', 'user_id'], context=context)
res = res and res[0] or {}
datas['form'] = res
@ -54,8 +57,8 @@ class pos_payment_report_date(osv.osv_memory):
'user_id': fields.many2many('res.users', 'res_user_sale', 'user_id', 'sale_id', 'Salesman')
}
_defaults = {
'date_start': lambda *a: time.strftime('%Y-%m-%d'),
'date_end': lambda *a: time.strftime('%Y-%m-%d'),
'date_start': time.strftime('%Y-%m-%d'),
'date_end': time.strftime('%Y-%m-%d'),
}
pos_payment_report_date()

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@ -15,19 +15,16 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import osv
from osv import fields
from osv import osv, fields
class pos_payment_report_user(osv.osv_memory):
_name = 'pos.payment.report.user'
_description = 'Sales lines by Users'
def print_report(self, cr, uid, ids, context=None):
"""
To get the date and print the report
@param self: The object pointer.
@ -36,11 +33,12 @@ class pos_payment_report_user(osv.osv_memory):
@param context: A standard dictionary
@return : retrun report
"""
if context is None:
context = {}
datas = {'ids': context.get('active_ids', [])}
res = self.read(cr, uid, ids, ['user_id'])
res = self.read(cr, uid, ids, ['user_id'], context=context)
res = res and res[0] or {}
datas['form'] = res
return {
'type': 'ir.actions.report.xml',
'report_name': 'pos.payment.report.user',

View File

@ -483,7 +483,10 @@ class task(osv.osv):
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
users_obj = self.pool.get('res.users')
obj_tm = users_obj.browse(cr, uid, uid, context).company_id.project_time_mode_id
# read uom as admin to avoid access rights issues, e.g. for portal/share users,
# this should be safe (no context passed to avoid side-effects)
obj_tm = users_obj.browse(cr, 1, uid).company_id.project_time_mode_id
tm = obj_tm and obj_tm.name or 'Hours'
res = super(task, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)

View File

@ -85,7 +85,7 @@
<label string="ID: %%(task_id)s"/>
<label string="Status: %%(state)s"/>
<label string="Date Start: %%(date_start)s"/>
<label string="Date Stop: %%(date_stop)s"/>
<label string="Date Stop: %%(date)s"/>
</group>
</page>
<page string="Tasks Stages" groups="base.group_extended">

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<openerp>
<data>
<data>
<record model="ir.ui.view" id="view_order_form_inherit">
<field name="name">sale.order.form.inherit</field>
@ -18,9 +18,9 @@
<field name="type">form</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="product_id" position="after">
<field name="analytics_id" domain="[('plan_id','&lt;&gt;',False)]"/>
</field>
<xpath expr="/form/notebook/page/field[@name='order_line']/form/notebook/page/field[@name='product_id']" position="after">
<field name="analytics_id" domain="[('plan_id','&lt;&gt;',False)]" groups="analytic.group_analytic_accounting"/>
</xpath>
</field>
</record>
@ -31,10 +31,10 @@
<field name="inherit_id" ref="sale.view_order_line_form2"/>
<field name="arch" type="xml">
<field name="product_id" position="after">
<field name="analytics_id" domain="[('plan_id','&lt;&gt;',False)]"/>
<field name="analytics_id" domain="[('plan_id','&lt;&gt;',False)]" groups="analytic.group_analytic_accounting"/>
</field>
</field>
</record>
</data>
</data>
</openerp>

View File

@ -290,7 +290,7 @@ class share_create(osv.osv_memory):
user_obj = self.pool.get('res.users')
result_obj = self.pool.get('share.wizard.result.line')
share_root_url = wizard_data.share_root_url
format_url = '%(login)' in share_root_url and '%(password)' in share_root_url
format_url = '%(login)s' in share_root_url and '%(password)s' in share_root_url
existing_passwd_str = _('*usual password*')
if wizard_data.user_type == 'new':
for email in wizard_data.new_users.split('\n'):
@ -430,7 +430,7 @@ class share_create(osv.osv_memory):
else:
body += _("This additional data has been automatically added to your current access.\n")
body += _("You may use your existing login and password to view it. As a reminder, your login is %s.\n") % result_line.login
if not tools.email_send(
user.user_email,
email_to,

View File

@ -90,7 +90,7 @@
- 'action_id' (id of action)
- 'domain' (string expression for full domain to apply as sent to server,
with dynamic data like 'uid' replaced by actual value (i.e. after eval)!)
- 'share_root_url' : URL for direct access to share page (may include %(login) and %(password) placeholders)
- 'share_root_url' : URL for direct access to share page (may include %(login)s and %(password)s placeholders)
-->
<record id="action_share_wizard" model="ir.actions.act_window">
<field name="name">Share Wizard</field>
@ -106,7 +106,7 @@
- 'action_id' (id of action)
- 'domain' (string expression for full domain to apply as sent to server,
with dynamic data like 'uid' replaced by actual value (i.e. after eval)!)
- 'share_root_url' : URL for direct access to share page (may include %(login) and %(password) placeholders)
- 'share_root_url' : URL for direct access to share page (may include %(login)s and %(password)s placeholders)
-->
<record id="action_share_wizard_step1" model="ir.actions.act_window">
<field name="name">Share Wizard</field>

View File

@ -49,7 +49,7 @@ class survey_question_wiz(osv.osv_memory):
@param context: A standard dictionary for contextual values
@return : Dictionary value for created view of particular survey pages.
"""
result = super(survey_question_wiz, self).fields_view_get(cr, uid, view_id, \
view_type, context, toolbar,submenu)
@ -61,7 +61,8 @@ class survey_question_wiz(osv.osv_memory):
sur_response_obj = self.pool.get('survey.response')
que_col_head = self.pool.get('survey.question.column.heading')
user_obj = self.pool.get('res.users')
if context is None:
context = {}
if view_type in ['form']:
wiz_id = 0
if not context.has_key('sur_name_id'):
@ -82,6 +83,8 @@ class survey_question_wiz(osv.osv_memory):
context.pop('active_id')
survey_id = context.get('survey_id', False)
if not survey_id:
return {}
sur_rec = survey_obj.browse(cr, uid, survey_id)
p_id = map(lambda x:x.id, sur_rec.page_ids)
total_pages = len(p_id)