commit
3a7c9de403
|
@ -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
|
||||
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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'] < time.strftime('%Y-%m-%d')) and (line['debit'] - line['credit']) or '' ]]</para>
|
||||
<para style="P13">[[ (line['date_maturity'] < 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'] < 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'] < 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>
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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$
|
||||
#
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
'process/base_contact_process.xml'
|
||||
],
|
||||
'demo_xml': ['base_contact_demo.xml'],
|
||||
'installable': False,
|
||||
'installable': True,
|
||||
'active': False,
|
||||
'certificate': '31287885469',
|
||||
}
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -50,6 +50,7 @@ Credits: Sistheo Zeekom CrysaLEAD
|
|||
"l10n_fr_pcg_view.xml"
|
||||
],
|
||||
"demo_xml" : [],
|
||||
"certificate" : "435321693876313629",
|
||||
"active": False,
|
||||
"installable": True
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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)])
|
||||
|
|
Loading…
Reference in New Issue