'date_due':due_date
})
return {'value':default}
-
- def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id=False, price=0.0, context={}):
+
+ def onchange_partner_id(self, cr, uid, ids, partner_id, journal_id=False, price=0.0, ttype=False, context={}):
"""price
Returns a dict that contains new values and context
})
if journal.type not in ('cash', 'bank'):
return default
-
- ids = move_line_pool.search(cr, uid, [('account_id.type','in', ('receivable','payable')), ('reconcile_id','=', False), ('partner_id','=',partner_id)], context=context)
+
+ account_type = 'receivable'
+ if ttype == 'payment':
+ account_type = 'payable'
+ else:
+ account_type = 'receivable'
+
+ ids = move_line_pool.search(cr, uid, [('account_id.type','=', account_type), ('reconcile_id','=', False), ('partner_id','=',partner_id)], context=context)
moves = move_line_pool.browse(cr, uid, ids)
total_credit = price or 0.0
total_debit = 0.0
default['value']['line_cr_ids'].append(rs)
else:
default['value']['line_dr_ids'].append(rs)
+
+ if ttype == 'payment' and len(default['value']['line_cr_ids']) > 0:
default['value']['pre_line'] = 1
+ elif ttype == 'receipt' and len(default['value']['line_dr_ids']) > 0:
+ default['value']['pre_line'] = 1
return default
}
def action_move_line_create(self, cr, uid, ids, *args):
+
+ def _get_payment_term_lines(term_id, amount):
+ term_pool = self.pool.get('account.payment.term')
+ if term_id and amount:
+ terms = term_pool.compute(cr, uid, term_id, amount)
+ return terms
+ return False
+
move_pool = self.pool.get('account.move')
move_line_pool = self.pool.get('account.move.line')
analytic_pool = self.pool.get('account.analytic.line')
}
move_id = move_pool.create(cr, uid, move)
company_currency = inv.account_id.company_id.currency_id.id
-
+
#create the first line manually
debit = 0.0
credit = 0.0
credit = currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.amount)
elif inv.type in ('sale', 'receipt'):
debit = currency_pool.compute(cr, uid, inv.currency_id.id, company_currency, inv.amount)
- move_line = {
- 'name':inv.name or '/',
- 'debit':debit,
- 'credit':credit,
- 'account_id':inv.account_id.id,
- 'move_id':move_id ,
- 'journal_id':inv.journal_id.id,
- 'period_id':inv.period_id.id,
- 'partner_id':inv.partner_id.id,
- 'currency_id':inv.currency_id.id,
- 'date':inv.date
- }
-
- master_line = move_line_pool.create(cr, uid, move_line)
+
+ if inv.type == 'purchase' and inv.term_id and _get_payment_term_lines(inv.term_id.id, credit or debit):
+ terms = _get_payment_term_lines(inv.term_id.id, credit or debit)
+ for term in terms:
+ due_date = term[0]
+ amount = term[1]
+ move_line = {
+ 'name':inv.name or '/',
+ 'debit':0.0,
+ 'credit':amount,
+ 'date_maturity':due_date,
+ 'account_id':inv.account_id.id,
+ 'move_id':move_id ,
+ 'journal_id':inv.journal_id.id,
+ 'period_id':inv.period_id.id,
+ 'partner_id':inv.partner_id.id,
+ 'currency_id':inv.currency_id.id,
+ 'date':inv.date
+ }
+ master_line = move_line_pool.create(cr, uid, move_line)
+ else:
+ move_line = {
+ 'name':inv.name or '/',
+ 'debit':debit,
+ 'credit':credit,
+ 'account_id':inv.account_id.id,
+ 'move_id':move_id ,
+ 'journal_id':inv.journal_id.id,
+ 'period_id':inv.period_id.id,
+ 'partner_id':inv.partner_id.id,
+ 'currency_id':inv.currency_id.id,
+ 'date':inv.date
+ }
+ master_line = move_line_pool.create(cr, uid, move_line)
rec_list_ids = []
line_total = debit - credit
return res
_columns = {
- 'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1),
+ 'voucher_id':fields.many2one('account.voucher', 'Voucher', required=1, ondelete='cascade'),
'name':fields.char('Description', size=256),
'account_id':fields.many2one('account.account','Account', required=True),
'partner_id':fields.related('voucher_id', 'partner_id', type='many2one', relation='res.partner', string='Partner'),
elif journal.type in ('purchase', 'expense', 'sale_refund'):
account_id = journal.default_debit_account_id and journal.default_debit_account_id.id or False
elif partner_id:
- account_id = partner_pool.browse(cr, user, partner_id, context=context).property_account_receivable.id
+ partner = partner_pool.browse(cr, user, partner_id, context=context)
+ if context.get('type') == 'payment':
+ account_id = partner.property_account_payable.id
+ elif context.get('type') == 'receipt':
+ account_id = partner.property_account_receivable.id
if (not account_id) and 'account_id' in fields_list:
raise osv.except_osv(_('Invalid Error !'), _('Please change partner and try again !'))
<field name="arch" type="xml">
<form string="Bill Payment">
<group col="6" colspan="4">
- <field name="partner_id" on_change="onchange_partner_id(partner_id, type, journal_id)"/>
+ <field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, type)" string="Customer"/>
+ <field name="journal_id"
+ domain="[('type','in',['bank', 'cash'])]"
+ widget="selection" select="1"
+ on_change="onchange_partner_id(partner_id, journal_id, amount)"
+ string="Payment Method"/>
+ <field name="amount"/>
+ <field name="reference" select="1" string="Payment Ref"/>
<field name="name" colspan="4"/>
- <field name="journal_id" domain="[('type','in',['bank', 'cash'])]" widget="selection" select="1" on_change="onchange_journal(journal_id,type)"/>
- <field name="account_id" domain="[('type','=','other')]" widget="selection" on_change="onchange_account(account_id)" readonly="1"/>
- <field name="number"/>
+ <field name="account_id"
+ domain="[('type','=','other')]"
+ widget="selection"
+ on_change="onchange_account(account_id)"
+ invisible="True"/>
+ <field name="pre_line" invisible="1"/>
<field name="type" invisible="True"/>
</group>
<notebook colspan="4">
<page string="Payment Information">
- <field name="line_ids" on_change="onchange_price(line_ids, False, False)" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="180">
+ <field name="line_dr_ids" on_change="onchange_price(line_dr_ids, False, False)" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140">
<tree string="Payment Lines" editable="bottom">
- <field name="amount"/>
- <field name="account_id"/>
- <field name="account_analytic_id"/>
+ <field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
+ on_change="onchange_move_line_id(move_line_id)"
+ domain="[('account_id.type','=','payable'), ('reconcile_id','=', False), ('partner_id','=',parent.partner_id)]"
+ />
+ <field name="account_id" domain="[('type','=','payable')]"/>
+ <field name="date_original" readonly="1"/>
+ <field name="date_due" readonly="1"/>
+ <field name="amount_original" readonly="1"/>
+ <field name="amount_unreconciled" sum="Open Balance" readonly="1"/>
+ <field name="amount" sum="Payment"/>
+ </tree>
+ </field>
+ <field name="line_cr_ids" colspan="4" nolabel="1" attrs="{'invisible': [('pre_line','=',False)]}" default_get="{'journal_id':journal_id, 'partner_id':partner_id}">
+ <tree string="Credits" editable="bottom">
+ <field name="move_line_id"/>
+ <field name="account_id" domain="[('type','=','receivable')]"/>
+ <field name="date_original"/>
+ <field name="amount_original"/>
+ <field name="amount" sum="Payment"/>
</tree>
</field>
<group col="2" colspan="3">
- <separator string="Narration" colspan="2"/>
+ <separator string="Internal Notes" colspan="2"/>
<field name="narration" colspan="2" nolabel="1"/>
</group>
<group col="2" colspan="1">
<field name="reference" select="1"/>
<field name="date" select="1" on_change="onchange_date(date)"/>
<field name="currency_id" select="1" attrs="{'readonly':[('type','in',['sale', 'purchase'])]}"/>
- <field name="type" on_change="onchange_journal(journal_id,type)"/>
</group>
</page>
<page string="Journal Items">
<field name="arch" type="xml">
<form string="Sales Payment">
<group col="6" colspan="4">
- <field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount)" string="Customer"/>
+ <field name="partner_id" required="1" on_change="onchange_partner_id(partner_id, journal_id, amount, type)" string="Customer"/>
<field name="journal_id"
domain="[('type','in',['bank', 'cash'])]"
widget="selection" select="1"
</group>
<notebook colspan="4">
<page string="Payment Information">
- <field name="line_cr_ids" default_get="{'journal_id':journal_id, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140">
+ <field name="line_cr_ids" default_get="{'journal_id':journal_id, 'type':type, 'partner_id':partner_id}" colspan="4" nolabel="1" height="140">
<tree string="Invoices and outstanding transactions" editable="bottom">
<field name="move_line_id" context="{'journal_id':parent.journal_id, 'partner_id':parent.partner_id}"
on_change="onchange_move_line_id(move_line_id)"