bzr revid: fp@tinyerp.com-20090128151446-15grcltzq5wk06o7
This commit is contained in:
Fabien Pinckaers 2009-01-28 16:14:46 +01:00
commit 3a7c9de403
16 changed files with 369 additions and 418 deletions

View File

@ -430,7 +430,9 @@ class account_invoice(osv.osv):
ait_obj = self.pool.get('account.invoice.tax')
for id in ids:
cr.execute("DELETE FROM account_invoice_tax WHERE invoice_id=%s", (id,))
for taxe in ait_obj.compute(cr, uid, id).values():
partner = self.browse(cr, uid, id).partner_id
context.update({'lang': partner.lang})
for taxe in ait_obj.compute(cr, uid, id, context=context).values():
ait_obj.create(cr, uid, taxe)
# Update the stored value (fields.function), so we write to trigger recompute
self.pool.get('account.invoice').write(cr, uid, ids, {}, context=context)
@ -481,7 +483,7 @@ class account_invoice(osv.osv):
def action_move_create(self, cr, uid, ids, *args):
ait_obj = self.pool.get('account.invoice.tax')
cur_obj = self.pool.get('res.currency')
context = {}
for inv in self.browse(cr, uid, ids):
if inv.move_id:
continue
@ -495,7 +497,9 @@ class account_invoice(osv.osv):
# one move line per invoice line
iml = self._get_analytic_lines(cr, uid, inv.id)
# check if taxes are all computed
compute_taxes = ait_obj.compute(cr, uid, inv.id)
context.update({'lang': inv.partner_id.lang})
compute_taxes = ait_obj.compute(cr, uid, inv.id, context=context)
if not inv.tax_line:
for tax in compute_taxes.values():
ait_obj.create(cr, uid, tax)
@ -1099,11 +1103,11 @@ class account_invoice_tax(osv.osv):
'base_amount': lambda *a: 0.0,
'tax_amount': lambda *a: 0.0,
}
def compute(self, cr, uid, invoice_id):
def compute(self, cr, uid, invoice_id, context={}):
tax_grouped = {}
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id)
inv = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context)
cur = inv.currency_id
company_currency = inv.company_id.currency_id.id

View File

@ -23,7 +23,7 @@
<field name="name">All Uninvoiced Entries</field>
<field name="res_model">account.analytic.line</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('invoice_id','=',False),('to_invoice','!=',False)]</field>
</record>
<menuitem action="action_hr_tree_invoiced_all" id="menu_action_hr_tree_invoiced_all" parent="menu_invoicing"/>
@ -32,7 +32,7 @@
<field name="name">My Uninvoiced Entries</field>
<field name="res_model">account.analytic.line</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('invoice_id','=',False),('to_invoice','!=',False),('account_id.user_id','=',uid)]</field>
</record>
<menuitem action="action_hr_tree_invoiced_my" id="menu_action_hr_tree_invoiced_my" parent="menu_invoicing"/>

View File

@ -42,8 +42,7 @@ class followup_line(osv.osv):
'delay': fields.integer('Days of delay'),
'start': fields.selection([('days','Net Days'),('end_of_month','End of Month')], 'Type of Term', size=64, required=True),
'followup_id': fields.many2one('account_followup.followup', 'Follow Ups', required=True, ondelete="cascade"),
'description': fields.text('Printed Message'),
#'prints': fields.one2many('account_followup.followup.print', 'line_id'),
'description': fields.text('Printed Message', translate=True),
}
followup_line()

View File

@ -1,28 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="demo_followup1" model="account_followup.followup">
<field name="name">Default follow-up</field>
<field name="company_id" ref="base.main_company"/>
<field name="description">First letter after 15 net days, 30 net days and 45 days end of month levels.</field>
</record>
<record id="demo_followup_line1" model="account_followup.followup.line">
<field name="name">Level 0 : 15 net days</field>
<field name="sequence">0</field>
<field name="start">days</field>
<field name="delay">15</field>
<field name="followup_id" ref="demo_followup1"/>
<field name="description">Date : %(date)s
Dear %(partner_name)s,
<field name="description">
Exception made if there was a mistake of ours, it seems that the following amount staid unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days.
Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting departement at (+32).10.68.94.39.
Best regards,</field>
Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting department at (+32).10.68.94.39.
</field>
</record>
<record id="demo_followup_line2" model="account_followup.followup.line">
@ -31,16 +27,16 @@ Best regards,</field>
<field name="start">days</field>
<field name="delay">30</field>
<field name="followup_id" ref="demo_followup1"/>
<field name="description">LEVEL 1:
Date : %(date)s
<field name="description">
We are disappointed to see that despite sending a reminder, that your account is now seriously overdue.
Dear %(partner_name)s,
It is essential that immediate payment is made, otherwise we will have to consider placing a stop on your account which means that we will no longer be able to supply your company with (goods/services).
Please, take appropriate measures in order to carry out this payment in the next 8 days
Exception made if there was a mistake of ours, it seems that the following amount staid unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days.
If there is a problem with paying invoice that we are not aware of, do not hesitate to contact our accounting department at (+32).10.68.94.39. so that we can resolve the matter quickly.
Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting departement at (+32).10.68.94.39.
Best regards,</field>
Details of due payments is printed below.
</field>
</record>
<record id="demo_followup_line3" model="account_followup.followup.line">
@ -49,17 +45,16 @@ Best regards,</field>
<field name="start">end_of_month</field>
<field name="delay">45</field>
<field name="followup_id" ref="demo_followup1"/>
<field name="description">LEVEL 2:
Date : %(date)s
<field name="description">
Despite several reminders, your account is still not settled.
Dear %(partner_name)s,
Unless full payment is made in next 8 days , then legal action for the recovery of the debt, will be taken without further notice.
Exception made if there was a mistake of ours, it seems that the following amount staid unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days.
I trust that this action will prove unnecessary and details of due payments is printed below.
Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting departement at (+32).10.68.94.39.
Best regards,</field>
In case of any queries concerning this matter, do not hesitate to contact our accounting department at (+32).10.68.94.39.
</field>
</record>
</data>
</openerp>

View File

@ -14,6 +14,10 @@
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
@ -26,6 +30,8 @@
<blockBackground colorName="#e6e6e6" start="5,0" stop="5,0"/>
<blockBackground colorName="#e6e6e6" start="6,0" stop="6,0"/>
<blockBackground colorName="#e6e6e6" start="7,0" stop="7,0"/>
<blockBackground colorName="#e6e6e6" start="8,0" stop="8,0"/>
<blockBackground colorName="#e6e6e6" start="9,0" stop="9,0"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
@ -35,26 +41,30 @@
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" fontName="Times-Roman" fontSize="14.0" leading="17" alignment="CENTER"/>
<paraStyle name="P2" fontName="Times-Roman" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P3" fontName="Times-Roman" fontSize="6.0" leading="8" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P4" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P5" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P6" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P7" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P1" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P2" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P3" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P4" fontName="Times-Roman" alignment="LEFT"/>
<paraStyle name="P5" fontName="Times-Roman" fontSize="14.0" leading="17" alignment="CENTER"/>
<paraStyle name="P6" fontName="Times-Roman" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P7" fontName="Times-Roman" fontSize="6.0" leading="8" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P8" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P9" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P10" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P11" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P12" fontName="Times-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P13" fontName="Times-Roman" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P14" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P15" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P16" fontName="Times-Roman" fontSize="11.0" leading="14" alignment="LEFT"/>
<paraStyle name="P17" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P18" fontName="Times-Roman" fontSize="11.0" leading="14" alignment="LEFT"/>
<paraStyle name="P19" fontName="Times-Roman" alignment="LEFT"/>
<paraStyle name="P20" fontName="Times-Roman" fontSize="14.0" leading="17" alignment="LEFT"/>
<paraStyle name="P10" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P11" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P12" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P13" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P14" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P15" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P16" fontName="Times-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P17" fontName="Times-Roman" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P18" fontName="Times-Roman" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P19" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P20" fontName="Times-Roman" fontSize="11.0" leading="14" alignment="LEFT"/>
<paraStyle name="P21" fontName="Times-Roman" fontSize="11.0" leading="14"/>
<paraStyle name="P22" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P23" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P24" fontName="Times-Roman" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Standard" fontName="Times-Roman"/>
<paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
@ -64,172 +74,189 @@
<paraStyle name="Index" fontName="Times-Roman"/>
</stylesheet>
<story>
<para style="P2">[[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]] <font face="Times-Roman">[[ setLang(o.lang) ]]</font></para>
<para style="P6">[[ repeatIn(ids_to_objects(data['form']['partner_ids']),'o') ]] <font face="Times-Roman">[[ setLang(o.lang) ]]</font></para>
<blockTable colWidths="286.0,224.0" style="Tableau2">
<tr>
<td>
<para style="P3">
<para style="P7">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P14">[[ o.name ]]</para>
<para style="P3">[[ repeatIn(adr_get(o,'invoice'),'a' )]]</para>
<para style="P15">[[ a['name'] ]]</para>
<para style="P15">[[ a['street'] ]]</para>
<para style="P15">[[ a['zip'] ]] </para>
<para style="P15">[[ a['city'] ]]</para>
<para style="P15">[[( a['country_id'] and a['country_id'][1]) or '']]</para>
<para style="P15">
<para style="P1">[[ o.name ]]</para>
<para style="P7">[[ repeatIn(adr_get(o,'invoice'),'a' )]]</para>
<para style="P2">[[ a['name'] ]]</para>
<para style="P2">[[ a['street'] ]]</para>
<para style="P2">[[ a['zip'] ]] </para>
<para style="P2">[[ a['city'] ]]</para>
<para style="P2">[[( a['country_id'] and a['country_id'][1]) or '']]</para>
<para style="P2">
<font color="white"> </font>
</para>
<para style="P15">VAT: [[ o.vat or removeParentNode('para') ]]</para>
<para style="P2">VAT: [[ o.vat or removeParentNode('para') ]]</para>
</td>
</tr>
</blockTable>
<para style="P1">
<para style="P5">
<font color="white"> </font>
</para>
<para style="P20">
<font color="white"> </font>
</para>
<para style="P15"><font face="Times-Roman">Document</font><font face="Times-Roman">:</font> Customer account statement</para>
<para style="P15">
<para style="P2"><font face="Times-Roman">Document</font><font face="Times-Roman">:</font> Customer account statement</para>
<para style="P2">
<font face="Times-Roman">Date: </font>
<font face="Times-Roman">[[ time.strftime('%d/%m/%Y') ]]</font>
</para>
<para style="P17"><font face="Times-Roman">Customer Ref:</font> [[ o.id ]]</para>
<para style="P18">
<para style="P3"><font face="Times-Roman">Customer Ref:</font> [[ o.id ]]</para>
<para style="P3">
<font color="white"> </font>
</para>
<para style="P18">Dear Sir/Madam,</para>
<para style="P18">
<font color="white"> </font>
</para>
<para style="P18">According to our accounting, the following Invoices are unpaid. Could you please verify on your side, and take appropriate measures to pay the balance due in the next 8 days.</para>
<para style="P18">
<font color="white"> </font>
</para>
<para style="P18">If the payment has been very recently made i.e. as this reminder was issued, consider this reminder as void. Do not hesitate to contact our accounting department for further queries.</para>
<para style="P18">
<font color="white"> </font>
</para>
<para style="P18">Best regards.</para>
<para style="P3">Dear [[ a['name'] ]], </para>
<para style="P19">
<font color="white"> </font>
</para>
<blockTable colWidths="59.0,137.0,65.0,58.0,60.0,57.0,56.0,19.0" style="Table1">
<blockTable colWidths="18.0,492.0" style="Table3">
<tr>
<td>
<para style="P4">Date</para>
<para style="P17">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P4">Description</para>
<para style="P20">[[ format(get_text(o)) ]]</para>
</td>
</tr>
</blockTable>
<para style="P20">
<font color="white"> </font>
</para>
<para style="P20">Best Regards,</para>
<para style="P4">
<font color="white"> </font>
</para>
<blockTable colWidths="55.0,81.0,63.0,73.0,42.0,31.0,54.0,19.0,46.0,45.0" style="Table1">
<tr>
<td>
<para style="P8">Date</para>
</td>
<td>
<para style="P4">Ref</para>
<para style="P8">Description</para>
</td>
<td>
<para style="P4">Maturity date</para>
<para style="P8">Ref</para>
</td>
<td>
<para style="P5">Due</para>
<para style="P8">Maturity date</para>
</td>
<td>
<para style="P5">Paid</para>
<para style="P9">Due</para>
</td>
<td>
<para style="P5">Maturity</para>
<para style="P9">Paid</para>
</td>
<td>
<para style="P5">Li.</para>
<para style="P9">Maturity</para>
</td>
<td>
<para style="P9">Li.</para>
</td>
<td>
<para style="P9">Amount</para>
</td>
<td>
<para style="P9">cur.</para>
</td>
</tr>
<tr>
<td>
<para style="P6">
<para style="P10">
<font face="Times-Roman">[[repeatIn(getLines(o), 'line') ]]</font>
<font face="Times-Roman"> [[ line['date'] ]]</font>
</para>
</td>
<td>
<para style="P7">[[ line['name'] ]]</para>
<para style="P11">[[ line['name'] ]]</para>
</td>
<td>
<para style="P8">[[ line['ref'] ]]</para>
<para style="P12">[[ line['ref'] ]]</para>
</td>
<td>
<para style="P8">[[ line['date_maturity'] ]]</para>
<para style="P12">[[ line['date_maturity'] ]]</para>
</td>
<td>
<para style="P11">[[ line['debit'] and '%.2f' % line['debit'] or '' ]]</para>
<para style="P15">[[ line['debit'] and '%.2f' % line['debit'] or '' ]]</para>
</td>
<td>
<para style="P9">[[ line['credit'] and '%.2f' % line['credit'] or '' ]]</para>
<para style="P13">[[ line['credit'] and '%.2f' % line['credit'] or '' ]]</para>
</td>
<td>
<para style="P9">[[ (line['date_maturity'] &lt; time.strftime('%Y-%m-%d')) and (line['debit'] - line['credit']) or '' ]]</para>
<para style="P13">[[ (line['date_maturity'] &lt; time.strftime('%Y-%m-%d')) and (line['debit'] - line['credit']) or '' ]]</para>
</td>
<td>
<para style="P9">[[ line['blocked'] and 'X' or '' ]]</para>
<para style="P13">[[ line['blocked'] and 'X' or '' ]]</para>
</td>
<td>
<para style="P13">[[ line['amount_currency'] ]]</para>
</td>
<td>
<para style="P13">[[ line['currency_id'] and line['currency_id'][1] or '' ]] </para>
</td>
</tr>
</blockTable>
<blockTable colWidths="318.0,61.0,56.0,56.0,19.0" style="Table2">
<blockTable colWidths="273.0,41.0,31.0,54.0,110.0" style="Table2">
<tr>
<td>
<para style="P12">Sub-Total: </para>
<para style="P16">Sub-Total: </para>
</td>
<td>
<para style="P12">[[ '%.2f' % (reduce(lambda x,y: x+y['debit'], getLines(o), 0)) ]]</para>
<para style="P16">[[ '%.2f' % (reduce(lambda x,y: x+y['debit'], getLines(o), 0)) ]]</para>
</td>
<td>
<para style="P9">
<para style="P13">
<font face="Times-Bold">[[ '%.2f' % (reduce(lambda x,y: x+y['credit'], getLines(o), 0)) ]]</font>
</para>
</td>
<td>
<para style="P11">[[ reduce(lambda x,y: x+(y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] &lt; time.strftime('%Y-%m-%d'), getLines(o)), 0) ]]</para>
<para style="P15">[[ reduce(lambda x,y: x+(y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] &lt; time.strftime('%Y-%m-%d'), getLines(o)), 0) ]]</para>
</td>
<td>
<para style="P13">
<para style="P18">
<font color="white"> </font>
</para>
</td>
</tr>
<tr>
<td>
<para style="P12">Balance: </para>
<para style="P16">Balance: </para>
</td>
<td>
<para style="P12">[[ '%.2f' % (reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0)) ]]</para>
<para style="P16">[[ '%.2f' % (reduce(lambda x,y: x+(y['debit'] - y['credit']), getLines(o), 0)) ]]</para>
</td>
<td>
<para style="P10">
<para style="P14">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P12">
<para style="P16">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P13">
<para style="P18">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<para style="Standard">
<para style="P3">
<font color="white"> </font>
</para>
<para style="P16">
<para style="P2">
<font face="Times-Roman">Total amount due: </font>
<font face="Times-Roman">[[ '%.2f' % (reduce(lambda x,y: x+(y['debit']-y['credit']), getLines(o), 0)) ]] [[ company.currency_id.name]].</font>
</para>
<para style="P15">
<para style="P2">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#
@ -34,6 +34,7 @@ class report_rappel(report_sxw.rml_parse):
'ids_to_objects': self._ids_to_objects,
'adr_get' : self._adr_get,
'getLines' : self._lines_get,
'get_text' : self._get_text
})
def _ids_to_objects(self, partners_ids):
@ -60,6 +61,24 @@ class report_rappel(report_sxw.rml_parse):
movelines = moveline_obj.read(self.cr, self.uid, movelines)
return movelines
def _get_text(self, data):
text = ""
a = {}
partner_line = pooler.get_pool(self.cr.dbname).get('account.move.line').search(self.cr, self.uid, [('partner_id','=',data.id)])
for i in pooler.get_pool(self.cr.dbname).get('account.move.line').browse(self.cr, self.uid, partner_line):
if i.followup_line_id and str(i.followup_line_id.delay)=='45':
text = i.followup_line_id.description
a['45'] = text
elif i.followup_line_id and str(i.followup_line_id.delay)=='30':
text = i.followup_line_id.description
a['30'] = text
elif i.followup_line_id and str(i.followup_line_id.delay)=='15':
text = i.followup_line_id.description
a['15'] = text
text = (a.has_key('45') and a['45']) or (a.has_key('30') and a['30']) or (a.has_key('15') and a['15'])
return text
report_sxw.report_sxw('report.account_followup.followup.print',
'res.partner', 'addons/account_followup/report/rappel.rml',
parser=report_rappel)

View File

@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#

View File

@ -49,7 +49,7 @@
'process/base_contact_process.xml'
],
'demo_xml': ['base_contact_demo.xml'],
'installable': False,
'installable': True,
'active': False,
'certificate': '31287885469',
}

View File

@ -275,11 +275,12 @@
<field name="arch" type="xml">
<form string="Cases">
<field colspan="4" name="name" select="1"/>
<field colspan="3" name="section_id"/>
<field colspan="2" name="section_id"/>
<field name="date" select="1"/>
<field name="date_deadline" select="2"/>
<field colspan="3" name="priority"/>
<notebook>
<field name="priority"/>
<newline />
<notebook colspan="4">
<page string="General">
<group col="8" colspan="4">
<field colspan="4" name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" select="1"/>

View File

@ -50,6 +50,7 @@ Credits: Sistheo Zeekom CrysaLEAD
"l10n_fr_pcg_view.xml"
],
"demo_xml" : [],
"certificate" : "435321693876313629",
"active": False,
"installable": True
}

View File

@ -44,102 +44,97 @@ STATE_PRIOR = {
'paid' : 7
}
class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'associate_member': fields.many2one('res.partner', 'Associate member'),
}
res_partner()
REQUETE = '''SELECT partner, state FROM (
SELECT members.partner AS partner,
CASE WHEN MAX(members.state) = 0 THEN 'none'
ELSE CASE WHEN MAX(members.state) = 1 THEN 'canceled'
ELSE CASE WHEN MAX(members.state) = 2 THEN 'old'
ELSE CASE WHEN MAX(members.state) = 3 THEN 'waiting'
ELSE CASE WHEN MAX(members.state) = 4 THEN 'invoiced'
ELSE CASE WHEN MAX(members.state) = 6 THEN 'free'
ELSE CASE WHEN MAX(members.state) = 7 THEN 'paid'
END END END END END END END END
AS state FROM (
SELECT partner,
CASE WHEN MAX(inv_digit.state) = 4 THEN 7
ELSE CASE WHEN MAX(inv_digit.state) = 3 THEN 4
ELSE CASE WHEN MAX(inv_digit.state) = 2 THEN 3
ELSE CASE WHEN MAX(inv_digit.state) = 1 THEN 1
END END END END
AS state
FROM (
SELECT p.id as partner,
CASE WHEN ai.state = 'paid' THEN 4
ELSE CASE WHEN ai.state = 'open' THEN 3
ELSE CASE WHEN ai.state = 'proforma' THEN 2
ELSE CASE WHEN ai.state = 'draft' THEN 2
ELSE CASE WHEN ai.state = 'cancel' THEN 1
END END END END END
AS state
FROM res_partner p
JOIN account_invoice ai ON (
p.id = ai.partner_id
)
JOIN account_invoice_line ail ON (
ail.invoice_id = ai.id
)
JOIN membership_membership_line ml ON (
ml.account_invoice_line = ail.id
)
WHERE ml.date_from <= '%s'
AND ml.date_to >= '%s'
GROUP BY
p.id,
ai.state
)
AS inv_digit
GROUP by partner
UNION
SELECT p.id AS partner,
CASE WHEN p.free_member THEN 6
ELSE CASE WHEN p.associate_member IN (
SELECT ai.partner_id FROM account_invoice ai JOIN
account_invoice_line ail ON (ail.invoice_id = ai.id AND ai.state = 'paid')
JOIN membership_membership_line ml ON (ml.account_invoice_line = ail.id)
WHERE ml.date_from <= '%s'
AND ml.date_to >= '%s'
)
THEN 5
END END
AS state
FROM res_partner p
WHERE p.free_member
OR p.associate_member > 0
UNION
SELECT p.id as partner,
MAX(CASE WHEN ai.state = 'paid' THEN 2
ELSE 0
END)
AS state
FROM res_partner p
JOIN account_invoice ai ON (
p.id = ai.partner_id
)
JOIN account_invoice_line ail ON (
ail.invoice_id = ai.id
)
JOIN membership_membership_line ml ON (
ml.account_invoice_line = ail.id
)
WHERE ml.date_from < '%s'
AND ml.date_to < '%s'
AND ml.date_from <= ml.date_to
GROUP BY
p.id
)
AS members
GROUP BY members.partner
)
AS final
%s
'''
#~ REQUETE = '''SELECT partner, state FROM (
#~ SELECT members.partner AS partner,
#~ CASE WHEN MAX(members.state) = 0 THEN 'none'
#~ ELSE CASE WHEN MAX(members.state) = 1 THEN 'canceled'
#~ ELSE CASE WHEN MAX(members.state) = 2 THEN 'old'
#~ ELSE CASE WHEN MAX(members.state) = 3 THEN 'waiting'
#~ ELSE CASE WHEN MAX(members.state) = 4 THEN 'invoiced'
#~ ELSE CASE WHEN MAX(members.state) = 6 THEN 'free'
#~ ELSE CASE WHEN MAX(members.state) = 7 THEN 'paid'
#~ END END END END END END END END
#~ AS state FROM (
#~ SELECT partner,
#~ CASE WHEN MAX(inv_digit.state) = 4 THEN 7
#~ ELSE CASE WHEN MAX(inv_digit.state) = 3 THEN 4
#~ ELSE CASE WHEN MAX(inv_digit.state) = 2 THEN 3
#~ ELSE CASE WHEN MAX(inv_digit.state) = 1 THEN 1
#~ END END END END
#~ AS state
#~ FROM (
#~ SELECT p.id as partner,
#~ CASE WHEN ai.state = 'paid' THEN 4
#~ ELSE CASE WHEN ai.state = 'open' THEN 3
#~ ELSE CASE WHEN ai.state = 'proforma' THEN 2
#~ ELSE CASE WHEN ai.state = 'draft' THEN 2
#~ ELSE CASE WHEN ai.state = 'cancel' THEN 1
#~ END END END END END
#~ AS state
#~ FROM res_partner p
#~ JOIN account_invoice ai ON (
#~ p.id = ai.partner_id
#~ )
#~ JOIN account_invoice_line ail ON (
#~ ail.invoice_id = ai.id
#~ )
#~ JOIN membership_membership_line ml ON (
#~ ml.account_invoice_line = ail.id
#~ )
#~ WHERE ml.date_from <= '%s'
#~ AND ml.date_to >= '%s'
#~ GROUP BY
#~ p.id,
#~ ai.state
#~ )
#~ AS inv_digit
#~ GROUP by partner
#~ UNION
#~ SELECT p.id AS partner,
#~ CASE WHEN p.free_member THEN 6
#~ ELSE CASE WHEN p.associate_member IN (
#~ SELECT ai.partner_id FROM account_invoice ai JOIN
#~ account_invoice_line ail ON (ail.invoice_id = ai.id AND ai.state = 'paid')
#~ JOIN membership_membership_line ml ON (ml.account_invoice_line = ail.id)
#~ WHERE ml.date_from <= '%s'
#~ AND ml.date_to >= '%s'
#~ )
#~ THEN 5
#~ END END
#~ AS state
#~ FROM res_partner p
#~ WHERE p.free_member
#~ OR p.associate_member > 0
#~ UNION
#~ SELECT p.id as partner,
#~ MAX(CASE WHEN ai.state = 'paid' THEN 2
#~ ELSE 0
#~ END)
#~ AS state
#~ FROM res_partner p
#~ JOIN account_invoice ai ON (
#~ p.id = ai.partner_id
#~ )
#~ JOIN account_invoice_line ail ON (
#~ ail.invoice_id = ai.id
#~ )
#~ JOIN membership_membership_line ml ON (
#~ ml.account_invoice_line = ail.id
#~ )
#~ WHERE ml.date_from < '%s'
#~ AND ml.date_to < '%s'
#~ AND ml.date_from <= ml.date_to
#~ GROUP BY
#~ p.id
#~ )
#~ AS members
#~ GROUP BY members.partner
#~ )
#~ AS final
#~ %s
#~ '''
class membership_line(osv.osv):
@ -214,19 +209,24 @@ class membership_line(osv.osv):
_order = 'id desc'
_constraints = [
(_check_membership_date, 'Error, this membership product is out of date', [])
]
]
membership_line()
class Partner(osv.osv):
'''Partner'''
_inherit = 'res.partner'
def _get_partner_id(self, cr, uid, ids, context=None):
data_inv = self.pool.get('membership.membership_line').browse(cr, uid, ids, context)
list_partner = []
for data in data_inv:
list_partner.append(data.partner.id)
ids2 = list_partner
while ids2:
ids2 = self.pool.get('res.partner').search(cr, uid, [('associate_member','in',ids2)], context=context)
list_partner += ids2
return list_partner
def _get_invoice_partner(self, cr, uid, ids, context=None):
@ -234,6 +234,10 @@ class Partner(osv.osv):
list_partner = []
for data in data_inv:
list_partner.append(data.partner_id.id)
ids2 = list_partner
while ids2:
ids2 = self.pool.get('res.partner').search(cr, uid, [('associate_member','in',ids2)], context=context)
list_partner += ids2
return list_partner
def _membership_state(self, cr, uid, ids, name, args, context=None):
@ -285,24 +289,17 @@ class Partner(osv.osv):
if partner_data.free_member and s!=0:
res[id] = 'free'
if partner_data.associate_member:
associate_partners_list = []
query="SELECT DISTINCT associate_member FROM res_partner"
cr.execute(query)
for p in cr.fetchall():
if p != partner_data.id:
associate_partners_list.append(p)
if associate_partners_list != []:
self._membership_state(cr, uid, associate_partners_list, name, args, context)
res[id] = partner_data.associate_member.membership_state
return res
#no more need becaz of new functionality store attribut on function field
# def _membership_state_search(self, cr, uid, obj, name, args):
# '''Search on membership state'''
#
# today = time.strftime('%Y-%m-%d')
# clause = 'WHERE '
# for i in range(len(args)):
# if i!=0:
# clause += 'OR '
# clause += 'state '+args[i][1]+" '"+args[i][2]+"' "
# cr.execute(REQUETE % (today, today, today, today, today, today, clause))
# ids=[x[0] for x in cr.fetchall()]
#
# return [('id', 'in', ids)]
def _membership_start(self, cr, uid, ids, name, args, context=None):
'''Return the start date of membership'''
res = {}
@ -321,25 +318,6 @@ class Partner(osv.osv):
res[partner.id] = False
return res
# def _membership_start_search(self, cr, uid, obj, name, args):
# '''Search on membership start date'''
# if not len(args):
# return []
# where = ' AND '.join(['date_from '+x[1]+' \''+str(x[2])+'\''
# for x in args])
# cr.execute('SELECT partner, MIN(date_from) \
# FROM ( \
# SELECT partner, MIN(date_from) AS date_from \
# FROM membership_membership_line \
# GROUP BY partner \
# ) AS foo \
# WHERE '+where+' \
# GROUP BY partner')
# res = cr.fetchall()
# if not res:
# return [('id', '=', '0')]
# return [('id', 'in', [x[0] for x in res])]
def _membership_stop(self, cr, uid, ids, name, args, context=None):
'''Return the stop date of membership'''
res = {}
@ -359,25 +337,6 @@ class Partner(osv.osv):
else:
res[partner.id] = False
return res
#
# def _membership_stop_search(self, cr, uid, obj, name, args):
# '''Search on membership stop date'''
# if not len(args):
# return []
# where = ' AND '.join(['date_to '+x[1]+' \''+str(x[2])+'\''
# for x in args])
# cr.execute('SELECT partner, MAX(date_to) \
# FROM ( \
# SELECT partner, MAX(date_to) AS date_to \
# FROM membership_membership_line \
# GROUP BY partner \
# ) AS foo \
# WHERE '+where+' \
# GROUP BY partner')
# res = cr.fetchall()
# if not res:
# return [('id', '=', '0')]
# return [('id', 'in', [x[0] for x in res])]
def _membership_cancel(self, cr, uid, ids, name, args, context=None):
'''Return the cancel date of membership'''
@ -393,28 +352,6 @@ class Partner(osv.osv):
res[partner_id] = False
return res
# def _membership_cancel_search(self, cr, uid, obj, name, args):
# '''Search on membership cancel date'''
# if not len(args):
# return []
# where = ' AND '.join(['date_cancel '+x[1]+' \''+str(x[2])+'\''
# for x in args])
# cr.execute('SELECT partner, MIN(date_cancel) \
# FROM ( \
# SELECT partner, MIN(date_cancel) AS date_cancel \
# FROM membership_membership_line \
# GROUP BY partner \
# ) AS foo \
# WHERE '+where+' \
# GROUP BY partner')
# res = cr.fetchall()
# if not res:
# return [('id', '=', '0')]
# return [('id', 'in', [x[0] for x in res])]
_inherit = 'res.partner'
def _get_partners(self, cr, uid, ids, context={}):
ids2 = ids
while ids2:
@ -423,45 +360,69 @@ class Partner(osv.osv):
return ids
_columns = {
'member_lines': fields.one2many('membership.membership_line', 'partner',
'Membership'),
'membership_amount': fields.float('Membership amount', digites=(16, 2),
help='The price negociated by the partner'),
# 'membership_state': fields.function(_membership_state, method=True, string='Current membership state',
# type='selection', selection=STATE, fnct_search=_membership_state_search),
'membership_state': fields.function(_membership_state, method=True, string='Current membership state',
type='selection',selection=STATE,store={'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(_get_partners, ['free_member'], 10)}),
# 'associate_member': fields.many2one('res.partner', 'Associate member'),
'associate_member': fields.many2one('res.partner', 'Associate member'),
'member_lines': fields.one2many('membership.membership_line', 'partner', 'Membership'),
'free_member': fields.boolean('Free member'),
# 'membership_start': fields.function(_membership_start, method=True,
# string='Start membership date', type='date',
# fnct_search=_membership_start_search),
'membership_start': fields.function(_membership_start, method=True,
string='Start membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}),
# 'membership_stop': fields.function(_membership_stop, method=True,
# string='Stop membership date', type='date',
# fnct_search=_membership_stop_search),
'membership_stop': fields.function(_membership_stop, method=True,
string='Stop membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}),
# 'membership_cancel': fields.function(_membership_cancel, method=True,
# string='Cancel membership date', type='date',
# fnct_search=_membership_cancel_search),
'membership_cancel': fields.function(_membership_cancel, method=True,
string='Cancel membership date', type='date',store={'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)}),
'membership_amount': fields.float(
'Membership amount', digites=(16, 2),
help='The price negociated by the partner'),
'membership_state': fields.function(
_membership_state, method = True,
string = 'Current membership state', type = 'selection',
selection = STATE ,store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(_get_partners, ['free_member'], 10)
}
),
'membership_start': fields.function(
_membership_start, method=True,
string = 'Start membership date', type = 'date',
store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
}
),
'membership_stop': fields.function(
_membership_stop, method = True,
string = 'Stop membership date', type = 'date',
store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
}
),
'membership_cancel': fields.function(
_membership_cancel, method = True,
string = 'Cancel membership date', type='date',
store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
}
),
}
_defaults = {
'free_member': lambda *a: False,
'membership_cancel' : lambda *d : False,
}
def _check_recursion(self, cr, uid, ids):
level = 100
while len(ids):
cr.execute('select distinct associate_member from res_partner where id in ('+','.join(map(str,ids))+')')
ids = filter(None, map(lambda x:x[0], cr.fetchall()))
if not level:
return False
level -= 1
return True
_constraints = [
(_check_recursion, 'Error ! You can not create recursive associated members.', ['associate_member'])
]
Partner()
class product_template(osv.osv):
@ -526,36 +487,6 @@ class Invoice(osv.osv):
})
return result
# def action_move_create(self, cr, uid, ids, context=None):
# '''Create membership.membership_line if the product is for membership'''
# if context is None:
# context = {}
# member_line_obj = self.pool.get('membership.membership_line')
# partner_obj = self.pool.get('res.partner')
# for invoice in self.browse(cr, uid, ids):
#
# # fetch already existing member lines
# former_mlines = member_line_obj.search(cr,uid,
# [('account_invoice_line','in',
# [ l.id for l in invoice.invoice_line])], context)
# # empty them :
# if former_mlines:
# member_line_obj.write(cr,uid,former_mlines, {'account_invoice_line':False}, context)
#
# for line in invoice.invoice_line:
# if line.product_id and line.product_id.membership:
# date_from = line.product_id.membership_date_from
# date_to = line.product_id.membership_date_to
# if invoice.date_invoice > date_from and invoice.date_invoice < date_to:
# date_from = invoice.date_invoice
# line_id = member_line_obj.create(cr, uid, {
# 'partner': invoice.partner_id.id,
# 'date_from': date_from,
# 'date_to': date_to,
# 'account_invoice_line': line.id,
# })
# return super(Invoice, self).action_move_create(cr, uid, ids, context)
def action_cancel(self, cr, uid, ids, context=None):
'''Create a 'date_cancel' on the membership_line object'''
if context is None:

View File

@ -22,31 +22,6 @@
<field name="type">service</field>
</record>
<!-- Demo data for paid member -->
<record id="paid_member_0" model="res.partner">
<field name="name">Milieu Defensie - Member</field>
</record>
<!-- Demo data for invoiced member -->
<record id="inv_member_0" model="res.partner">
<field name="name">MSF - PI</field>
</record>
<!-- Demo data for cancel member -->
<record id="cancel_member_0" model="res.partner">
<field name="name">WWF - C</field>
<field name="membership_cancel">2008-01-01</field>
</record>
<!-- Demo data for waiting member -->
<record id="waiting_member_0" model="res.partner">
<field name="name">Organisation A</field>
</record>
<!-- Demo data for res.partner.address -->
<record id="res_partner_address_0" model="res.partner.address">
<field name="partner_id" ref="membership.paid_member_0"/>
</record>
<!-- Demo data for Accounts -->
<record id="account_account_membershipaccount0" model="account.account">
@ -65,8 +40,8 @@
<field name="account_id" ref="account_account_membershipaccount0"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="res_partner_address_0"/>
<field name="partner_id" ref="membership.paid_member_0"/>
<field name="address_invoice_id" ref="base.res_partner_address_8"/>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="date_invoice">2008-05-09</field>
<field name="journal_id" ref="account.sales_journal"/>
<field name="state">paid</field>
@ -76,8 +51,8 @@
<field name="account_id" ref="account_account_membershipaccount0"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="res_partner_address_0"/>
<field name="partner_id" ref="membership.inv_member_0"/>
<field name="address_invoice_id" ref="base.res_partner_address_9"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="date_invoice">2008-05-09</field>
<field name="journal_id" ref="account.sales_journal"/>
<field name="state">open</field>
@ -87,8 +62,8 @@
<field name="account_id" ref="account_account_membershipaccount0"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="res_partner_address_0"/>
<field name="partner_id" ref="membership.cancel_member_0"/>
<field name="address_invoice_id" ref="base.res_partner_address_zen"/>
<field name="partner_id" ref="base.res_partner_3"/>
<field name="date_invoice">2008-05-09</field>
<field name="journal_id" ref="account.sales_journal"/>
<field name="state">cancel</field>
@ -98,8 +73,8 @@
<field name="account_id" ref="account_account_membershipaccount0"/>
<field name="company_id" ref="base.main_company"/>
<field name="currency_id" ref="base.EUR"/>
<field name="address_invoice_id" ref="res_partner_address_0"/>
<field name="partner_id" ref="membership.waiting_member_0"/>
<field name="address_invoice_id" ref="base.res_partner_address_14"/>
<field name="partner_id" ref="base.res_partner_15"/>
<field name="date_invoice">2008-05-09</field>
<field name="journal_id" ref="account.sales_journal"/>
<field name="state">draft</field>
@ -150,14 +125,14 @@
<field name="date_to">2009-08-01</field>
<field name="account_invoice_line" ref="account_invoice_line_membershipproduct0" />
<field name="state">paid</field>
<field name="partner" ref="paid_member_0"/>
<field name="partner" ref="base.res_partner_agrolait"/>
</record>
<record id="member_line_2" model="membership.membership_line">
<field name="date_from">2008-01-01</field>
<field name="date_to">2009-08-01</field>
<field name="account_invoice_line" ref="account_invoice_line_membershipproduct1" />
<field name="state">invoiced</field>
<field name="partner" ref="inv_member_0"/>
<field name="partner" ref="base.res_partner_2"/>
</record>
<record id="member_line_3" model="membership.membership_line">
<field name="date_from">2008-01-01</field>
@ -165,35 +140,32 @@
<field name="date_cancel">2008-08-05</field>
<field name="account_invoice_line" ref="account_invoice_line_membershipproduct2" />
<field name="state">canceled</field>
<field name="partner" ref="cancel_member_0"/>
<field name="partner" ref="base.res_partner_3"/>
</record>
<record id="member_line_3" model="membership.membership_line">
<field name="date_from">2008-01-01</field>
<field name="date_to">2009-08-01</field>
<field name="account_invoice_line" ref="account_invoice_line_membershipproduct3" />
<field name="state">waiting</field>
<field name="partner" ref="waiting_member_0"/>
<field name="partner" ref="base.res_partner_15"/>
</record>
<!-- Demo data for cancel member -->
<record id="base.res_partner_3" model="res.partner">
<field name="membership_cancel">2009-01-01</field>
</record>
<!-- Demo data for free member -->
<record id="free_member_0" model="res.partner">
<field name="name">Oasis - Free</field>
<record id="base.res_partner_desertic_hispafuentes" model="res.partner">
<field name="free_member">True</field>
</record>
<!-- Demo data for associate member -->
<record id="associate_member_0" model="res.partner">
<field name="name">Silicium NGO - Associate</field>
<field name="associate_member" ref="paid_member_0"/>
<record id="base.res_partner_9" model="res.partner">
<field name="associate_member" ref="base.res_partner_agrolait"/>
</record>
<record id="associate_member_1" model="res.partner">
<field name="name">Partner - Associate</field>
<field name="associate_member" ref="paid_member_0"/>
</record>
<!-- Demo data for non member -->
<record id="non_member_0" model="res.partner">
<field name="name">MSF - Switzerland</field>
<record id="base.res_partner_8" model="res.partner">
<field name="associate_member" ref="base.res_partner_agrolait"/>
</record>
</data>

View File

@ -153,7 +153,7 @@
<td>
<para style="terp_default_9">[[ repeatIn(o.dest_address_id and [o.dest_address_id] or [],'addr') ]]</para>
<para style="terp_default_Bold_9">Shipping address :</para>
<para style="terp_default_9">[[ o.partner_id.title or '' ]] [[ o.partner_id.name ]]</para>
<para style="terp_default_9">[[ addr.partner_id.name ]]</para>
<para style="terp_default_9">[[ addr.title or '' ]] [[ addr.name ]]</para>
<para style="terp_default_9">[[ addr.street ]]</para>
<para style="terp_default_9">[[ addr.street2 or '' ]]</para>

View File

@ -75,15 +75,12 @@
<tr>
<td>
<para style="terp_default_Bold_9">Expected Delivery address:</para>
<para style="terp_default_9">[[( order.warehouse_id and order.warehouse_id.name) or order.partner_address_id.partner_id.name]]</para>
<para style="terp_default_9">[[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.title) or ' ']] [[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.name) or order.partner_address_id.name ]]</para>
<para style="terp_default_9">[[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street) or order.partner_address_id.street ]]</para>
<para style="terp_default_9">[[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street2) or order.partner_address_id.street2 ]]</para>
<para style="terp_default_9">[[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.zip) or order.partner_address_id.zip ]] [[ (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.city) or order.partner_address_id.city ]]</para>
<para style="terp_default_9">[[(order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.state_id and order.warehouse_id.partner_address_id.state_id.name) or order.partner_address_id and order.partner_address_id.state_id and order.partner_address_id.state_id.name]] [[(order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.country_id and order.warehouse_id.partner_address_id.country_id.name) or order.partner_address_id.country_id.name ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id.partner_id.name) or (order.warehouse_id and order.warehouse_id.name) or '']]</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.title) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.title) or ' ']] [[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.name) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.name) or '' ]]</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.street) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street) or '']]</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.street2) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street2) or '']]</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.zip) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.zip) or '' ]] [[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.city) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.city) or '' ]]</para>
<para style="terp_default_9">[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.state_id and order.dest_address_id.state_id.name) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.state_id and order.warehouse_id.partner_address_id.state_id.name) or '']] [[(order.dest_address_id and order.dest_address_id and order.dest_address_id.country_id and order.dest_address_id.country_id.name) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.country_id and order.warehouse_id.partner_address_id.country_id.name) or '' ]]</para>
</td>
<td>
<para style="terp_default_9">
@ -126,7 +123,7 @@
</tr>
</blockTable>
<section>
<para style="terp_default_9">[[ repeatIn(order.order_line,'order_line') ]]</para>
<para style="terp_default_9">[[repeatIn(order.order_line,'order_line')]]</para>
<blockTable colWidths="388.0,83.0,39.0,20.0" style="Table_Product_Line">
<tr>
<td>

View File

@ -66,8 +66,11 @@ class product_product(osv.osv):
location_ids = [id for (id,) in cr.fetchall()]
# build the list of ids of children of the location given by id
child_location_ids = self.pool.get('stock.location').search(cr, uid, [('location_id', 'child_of', location_ids)])
location_ids= len(child_location_ids) and child_location_ids or location_ids
if context.get('compute_child',True):
child_location_ids = self.pool.get('stock.location').search(cr, uid, [('location_id', 'child_of', location_ids)])
location_ids= len(child_location_ids) and child_location_ids or location_ids
else:
location_ids= location_ids
states_str = ','.join(map(lambda s: "'%s'" % s, states))

View File

@ -63,7 +63,8 @@ def _fill_inventory(self, cr, uid, data, context):
res=location_obj._product_get(cr, uid, location)
res_location[location]=res
else:
res=location_obj._product_get(cr, uid, data['form']['location_id'])
context.update({'compute_child':False})
res=location_obj._product_get(cr, uid, data['form']['location_id'],context=context)
res_location[data['form']['location_id']]=res
product_ids=[]
@ -73,7 +74,8 @@ def _fill_inventory(self, cr, uid, data, context):
#product_ids.append(product_id)
prod = pool.get('product.product').browse(cr, uid, [product_id])[0]
uom = prod.uom_id.id
amount=pool.get('stock.location')._product_get(cr, uid, location, [product_id], {'uom': uom})[product_id]
context.update({'uom': uom})
amount=pool.get('stock.location')._product_get(cr, uid, location, [product_id], context=context)[product_id]
if(amount):
line_ids=inventory_line_obj.search(cr,uid,[('inventory_id','=',data['id']),('location_id','=',location),('product_id','=',product_id),('product_uom','=',uom),('product_qty','=',amount)])