[MERGE] merged from trunk-addons branch

bzr revid: hmo@tinyerp.com-20100713115800-yhnlwf0rachbddat
This commit is contained in:
Harry (OpenERP) 2010-07-13 17:28:00 +05:30
commit 506b249a0f
182 changed files with 2878 additions and 4670 deletions

View File

@ -183,7 +183,7 @@ class account_cash_statement(osv.osv):
('open','Open')], 'State', required=True, states={'confirm': [('readonly', True)]}, readonly="1"),
'total_entry_encoding':fields.function(_get_sum_entry_encoding, method=True, store=True, string="Cash Transaction", help="Total cash transactions"),
'closing_date':fields.datetime("Closed On"),
'balance_end': fields.function(_end_balance, method=True, store=True, string='Balance', help="Closing balance based on Opening Balance and Transactions"),
'balance_end': fields.function(_end_balance, method=True, store=True, string='Balance', help="Closing balance based on Starting Balance and Cash Transactions"),
'balance_end_cash': fields.function(_balance_end_cash, method=True, store=True, string='Balance', help="Closing balance based on cashBox"),
'starting_details_ids': fields.one2many('account.cashbox.line', 'starting_id', string='Opening Cashbox'),
'ending_details_ids': fields.one2many('account.cashbox.line', 'ending_id', string='Closing Cashbox'),

View File

@ -482,7 +482,6 @@ class account_move_line(osv.osv):
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'account_move_line_journal_id_period_id_index\'')
if not cr.fetchone():
cr.execute('CREATE INDEX account_move_line_journal_id_period_id_index ON account_move_line (journal_id, period_id)')
cr.commit()
def _check_no_view(self, cr, uid, ids):
lines = self.browse(cr, uid, ids)
@ -675,6 +674,7 @@ class account_move_line(osv.osv):
account_id = line['account_id']['id']
partner_id = (line['partner_id'] and line['partner_id']['id']) or False
writeoff = debit - credit
# Ifdate_p in context => take this date
if context.has_key('date_p') and context['date_p']:
date=context['date_p']
@ -797,7 +797,7 @@ class account_move_line(osv.osv):
title = self.view_header_get(cr, uid, view_id, view_type, context)
xml = '''<?xml version="1.0"?>\n<tree string="%s" editable="top" refresh="5" on_write="on_create_write">\n\t''' % (title)
journal_pool = self.pool.get('account.journal')
ids = journal_pool.search(cr, uid, [])
journals = journal_pool.browse(cr, uid, ids)
all_journal = [None]
@ -814,14 +814,14 @@ class account_move_line(osv.osv):
else:
fields.get(field.field).append(journal.id)
common_fields[field.field] = common_fields[field.field] + 1
fld.append(('period_id', 3))
fld.append(('journal_id', 10))
flds.append('period_id')
flds.append('journal_id')
fields['period_id'] = all_journal
fields['journal_id'] = all_journal
from operator import itemgetter
fld = sorted(fld, key=itemgetter(1))
@ -835,13 +835,13 @@ class account_move_line(osv.osv):
for field_it in fld:
field = field_it[0]
if common_fields.get(field) == total:
fields.get(field).append(None)
if field=='state':
state = 'colors="red:state==\'draft\'"'
attrs = []
if field == 'debit':
attrs.append('sum="Total debit"')
@ -864,7 +864,7 @@ class account_move_line(osv.osv):
if field in widths:
attrs.append('width="'+str(widths[field])+'"')
attrs.append("invisible=\"context.get('visible_id') not in %s\"" % (fields.get(field)))
xml += '''<field name="%s" %s/>\n''' % (field,' '.join(attrs))
@ -914,7 +914,7 @@ class account_move_line(osv.osv):
journal = self.pool.get('account.journal').browse(cr, uid, [journal_id])[0]
if journal.allow_date and period_id:
period = self.pool.get('account.period').browse(cr, uid, [period_id])[0]
if not time.strptime(vals['date'],'%Y-%m-%d')>=time.strptime(period.date_start,'%Y-%m-%d') or not time.strptime(vals['date'],'%Y-%m-%d')<=time.strptime(period.date_stop,'%Y-%m-%d'):
if not time.strptime(vals['date'][:10],'%Y-%m-%d')>=time.strptime(period.date_start,'%Y-%m-%d') or not time.strptime(vals['date'][:10],'%Y-%m-%d')<=time.strptime(period.date_stop,'%Y-%m-%d'):
raise osv.except_osv(_('Error'),_('The date of your Ledger Posting is not in the defined period !'))
else:
return True

View File

@ -2300,7 +2300,6 @@
<field name="journal_id" on_change="onchange_journal_id(journal_id)" domain="[('type','=','cash')]" select="1" />
<field name="user_id" select="1" readonly="1"/>
<field name="period_id" select="1"/>
<!-- <field name="balance_end_real"/>-->
</group>
<notebook colspan="4">

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,6 @@ class journal_print(report_sxw.rml_parse):
ids_journal_period = obj_jperiod.search(self.cr, self.uid, [('journal_id','=',journal), ('period_id','=',period)])
if ids_journal_period:
self.cr.execute('update account_journal_period set state=%s where journal_id=%s and period_id=%s and state=%s', ('printed',journal,period,'draft'))
self.cr.commit()
self.cr.execute('select id from account_move_line where period_id=%s and journal_id=%s and state<>\'draft\' order by ('+ sort_selection +'),id', (period, journal))
ids = map(lambda x: x[0], self.cr.fetchall())
ids_final.append(ids)
@ -56,7 +55,6 @@ class journal_print(report_sxw.rml_parse):
line_ids.append(a)
return line_ids
self.cr.execute('update account_journal_period set state=%s where journal_id=%s and period_id=%s and state=%s', ('printed',journal_id,period_id,'draft'))
self.cr.commit()
self.cr.execute('select id from account_move_line where period_id=%s and journal_id=%s and state<>\'draft\' order by date,id', (period_id, journal_id))
ids = map(lambda x: x[0], self.cr.fetchall())
return obj_mline.browse(self.cr, self.uid, ids)

View File

@ -127,10 +127,10 @@
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
</blockTableStyle>
<blockTableStyle id="Table_Main_Table">
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,0" stop="0,-1"/>
<!--lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEAFTER" colorName="#ffffff" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#ffffff" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
@ -149,65 +149,51 @@
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,4" stop="0,-1"/>
<lineStyle kind="LINEAFTER" colorName="#ffffff" start="0,4" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/-->
</blockTableStyle>
<blockTableStyle id="Table_Tax_Header">
<blockTableStyle id="Table6">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Tax_Content">
<blockTableStyle id="Table5">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Table_Border_White">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="2,-1" stop="2,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Final_Border">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEABOVE" colorName="#ffffff" start="0,0" stop="0,0"/>
<lineStyle kind="LINEABOVE" colorName="#ffffff" start="1,0" stop="1,0"/>
</blockTableStyle>
<blockTableStyle id="Table_Coment_Payment_Term">
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table_Payment_Terms">
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<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"/>
<paraStyle name="Table Contents" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Caption" fontName="Times-Roman" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Times-Roman"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="15.0" leading="19" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Footer" fontName="Times-Roman"/>
<paraStyle name="P8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="0.0"/>
<paraStyle name="Horizontal Line" fontName="Times-Roman" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
<paraStyle name="Footer" fontName="Helvetica"/>
<paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
@ -227,25 +213,32 @@
<paraStyle name="terp_default_Right_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_Right_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_White_2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0" textColor="#ffffff"/>
<paraStyle name="terp_default_Note" rightIndent="0.0" leftIndent="9.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Table" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
<images/>
</stylesheet>
<images/>
<story>
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]] </para>
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para>
<blockTable colWidths="297.0,233.0" style="Table_Partner_Address">
<tr>
<td><para style="P8"><font color="white"> </font></para></td>
<td>
<para style="terp_default_8">[[ o.partner_id.name ]] [[ o.partner_id.title or '' ]]</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_8">[[ o.partner_id.title or '' ]] [[ o.partner_id.name ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.title or '' ]] [[ o.address_invoice_id.name ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.street ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.street2 or '' ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.zip or '' ]] [[ o.address_invoice_id.city or '' ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.state_id and o.address_invoice_id.state_id.name or '' ]]</para>
<para style="terp_default_8">[[ o.address_invoice_id.country_id and o.address_invoice_id.country_id.name or '' ]]</para>
<para style="P8"><font color="white"> </font></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_8">Tel. : [[ o.address_invoice_id.phone or removeParentNode('para') ]]</para>
<para style="terp_default_8">Fax : [[ o.address_invoice_id.fax or removeParentNode('para') ]]</para>
<para style="terp_default_8">VAT : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
@ -255,168 +248,278 @@
<para style="terp_header">Invoice [[ ((o.type == 'out_invoice' and (o.state == 'open' or o.state == 'paid')) or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
<para style="terp_header">PRO-FORMA [[ ((o.type == 'out_invoice' and o.state == 'proforma2') or removeParentNode('para')) and '' ]]</para>
<para style="terp_header">Draft Invoice [[ ((o.type == 'out_invoice' and o.state == 'draft') or removeParentNode('para')) and '' ]]</para>
<para style="terp_header">Canceled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]]</para>
<para style="terp_header">Cancelled Invoice [[ ((o.type == 'out_invoice' and o.state == 'cancel') or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
<para style="terp_header">Refund [[ (o.type=='out_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
<para style="terp_header">Supplier Refund [[ (o.type=='in_refund' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
<para style="terp_header">Supplier Invoice [[ (o.type=='in_invoice' or removeParentNode('para')) and '' ]] [[ o.number ]]</para>
<para style="P8"><font color="white"> </font></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="177.0,177.0,177.0" style="Table_Invoice_General_Header">
<tr>
<td><para style="terp_tblheader_General_Centre">Document</para></td>
<td><para style="terp_tblheader_General_Centre">Invoice Date</para></td>
<td><para style="terp_tblheader_General_Centre">Partner Ref.</para></td>
<td>
<para style="terp_tblheader_General_Centre">Document</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Invoice Date</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Partner Ref.</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="177.0,177.0,177.0" style="Table_General_Detail_Content">
<tr>
<td><para style="terp_default_Centre_9">[[ o.name ]]</para></td>
<td><para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para></td>
<td><para style="terp_default_Centre_9">[[ o.address_invoice_id.partner_id.ref or '' ]]</para></td>
<td>
<para style="terp_default_Centre_9">[[ o.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ formatLang(o.date_invoice,date=True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ o.address_invoice_id.partner_id.ref or '' ]]</para>
</td>
</tr>
</blockTable>
<para style="P8"><font color="white"></font></para>
<para style="P8"><font color="white"> </font></para>
<blockTable colWidths="211.0,62.0,63.0,63.0,40.0,84.0" style="Table_Header_Invoice_Line">
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="211.0,62.0,63.0,63.0,43.0,83.0" style="Table_Header_Invoice_Line">
<tr>
<td><para style="terp_tblheader_Details">Description</para></td>
<td><para style="terp_tblheader_Details">Taxes</para></td>
<td><para style="terp_tblheader_Details">Quantity</para></td>
<td><para style="terp_tblheader_Details_Centre">Unit Price</para></td>
<td><para style="terp_tblheader_Details">Disc.(%)</para></td>
<td><para style="terp_tblheader_Details_Centre">Price</para></td>
<td>
<para style="terp_tblheader_Details">Description</para>
</td>
<td>
<para style="terp_tblheader_Details">Taxes</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Quantity</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Unit Price</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Disc.(%)</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Price</para>
</td>
</tr>
</blockTable>
<section>
<para style="terp_default_8">[[ repeatIn(o.invoice_line,'l') ]]</para>
<blockTable colWidths="211.0,62.0,36.0,27.0,63.0,36.0,62.0,26.0" style="Table_Invoice_Line_Content">
<blockTable colWidths="211.0,62.0,41.0,22.0,63.0,42.0,59.0,23.0" style="Table_Invoice_Line_Content">
<tr>
<td><para style="terp_default_9">[[ l.name ]]</para></td>
<td><para style="terp_default_9">[[ ', '.join([ lt.description or '' for lt in l.invoice_line_tax_id ]) ]]</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(l.quantity)]]</para></td>
<td><para style="terp_default_Right_9">[[ (l.uos_id and l.uos_id.name) or '' ]]</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(l.price_unit) ]]</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(l.discount) ]] </para></td>
<td><para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]]</para></td>
<td><para style="terp_default_Right_9">[[ o.currency_id.code ]]</para></td>
<td>
<para style="terp_default_9">[[ l.name ]]</para>
</td>
<td>
<para style="terp_default_9">[[ ', '.join([ lt.name or '' for lt in l.invoice_line_tax_id ]) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(l.quantity)]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ (l.uos_id and l.uos_id.name) or '' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(l.price_unit) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(l.discount) ]] </para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(l.price_subtotal) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.currency_id.code ]]</para>
</td>
</tr>
<tr>
<td><para style="terp_default_Note">[[ format(l.note) or removeParentNode('tr') ]]</para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td><para style="terp_default_Note"><font color="white"> </font></para></td>
<td>
<para style="terp_default_Note">[[ format(l.note or '') or removeParentNode('tr') ]]</para>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Note">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="371.0,153.0" style="Table_Format_2">
<blockTable colWidths="370.0,153.0" style="Table_Format_2">
<tr>
<td>
<blockTable colWidths="176.0,258.0" style="Table_format_Table_Line_total">
<tr>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
</td>
<td>
<blockTable colWidths="62.0,59.0,25.0" style="Table_eclu_Taxes_Total">
<blockTable colWidths="62.0,62.0,22.0" style="Table_eclu_Taxes_Total">
<tr>
<td><para style="terp_default_Bold_9">Net Total:</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]]</para></td>
<td><para style="terp_default_Right_9">[[ o.currency_id.code ]]</para></td>
<td>
<para style="terp_default_9">Net Total:</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(o.amount_untaxed) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.currency_id.code ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,58.0,26.0" style="Table_Taxes_Total">
<para style="terp_default_2">
<font color="white"> </font>
</para>
<blockTable colWidths="63.0,61.0,23.0" style="Table_Taxes_Total">
<tr>
<td><para style="terp_default_Bold_9">Taxes:</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]]</para></td>
<td><para style="terp_default_Right_9">[[ o.currency_id.code ]]</para></td>
<td>
<para style="terp_default_9">Taxes:</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(o.amount_tax) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.currency_id.code ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,58.0,26.0" style="Table_Total_Include_Taxes">
<para style="terp_default_2">
<font color="white"> </font>
</para>
<blockTable colWidths="63.0,61.0,23.0" style="Table_Total_Include_Taxes">
<tr>
<td><para style="terp_default_Bold_9">Total:</para></td>
<td><para style="terp_default_Right_9">[[ formatLang(o.amount_total) ]]</para></td>
<td><para style="terp_default_Right_9">[[ o.currency_id.code ]]</para></td>
<td>
<para style="terp_default_Bold_9">Total:</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(o.amount_total) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.currency_id.code ]]</para>
</td>
</tr>
</blockTable>
</td>
</tr>
</blockTable>
<blockTable colWidths="530.0" style="Table_Main_Table">
<blockTable colWidths="530.0" style="Table4">
<tr>
<td>
<blockTable colWidths="54.0,80.0,67.0" style="Table_Tax_Header">
<blockTable colWidths="149.0,55.0,52.0" style="Table6">
<tr>
<td><para style="terp_tblheader_Details_Centre">Tax</para></td>
<td><para style="terp_tblheader_Details_Right">Base</para></td>
<td><para style="terp_tblheader_Details_Right">Amount</para></td>
<td>
<para style="terp_tblheader_Details">Tax</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Base</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Amount</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_2">[[ repeatIn(o.tax_line,'t') ]]</para>
<blockTable colWidths="149.0,55.0,52.0" style="Table5">
<tr>
<td>
<para style="terp_default_8">[[ t.name ]]</para>
</td>
<td>
<para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para>
</td>
<td>
<para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount) ]]</para>
</td>
</tr>
</blockTable>
</td>
</tr>
<tr>
<td>
<para style="terp_default_8">[[ repeatIn(o.tax_line,'t') ]]</para>
<blockTable colWidths="53.0,80.0,65.0" style="Table_Tax_Content">
<tr>
<td><para style="terp_default_Centre_8">[[ t.name ]] </para></td>
<td><para style="terp_default_Right_8">[[ formatLang(t.base) ]]</para></td>
<td><para style="terp_default_Right_8">[[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]][[ formatLang(t.amount) ]]</para></td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="530.0" style="Table3">
<tr>
<td>
<blockTable colWidths="53.0,60.0,65.0" style="Table_Table_Border_White">
<tr>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
</tr>
</blockTable>
<para style="terp_default_9">[[ format(o.comment or '') or removeParentNode('blockTable') ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="180.0,350.0" style="Table_Final_Border">
<blockTable colWidths="530.0" style="Table2">
<tr>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td><para style="terp_default_2"><font color="white"> </font></para></td>
<td>
<para style="terp_default_9">[[ format((o.payment_term and o.payment_term.note) or '') or removeParentNode('blockTable') ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="530.0" style="Table_Coment_Payment_Term">
<tr>
<td><para style="terp_default_9">[[ format(o.comment or removeParentNode('blockTable')) ]]</para></td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
<blockTable colWidths="530.0" style="Table_Payment_Terms">
<tr>
<td><para style="terp_default_9">[[ format((o.payment_term and o.payment_term.note) or removeParentNode('blockTable')) ]]</para></td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
<blockTable colWidths="128.0,402.0" style="Standard_Outline">
<blockTable colWidths="128.0,402.0" style="Table1">
<tr>
<td>
<para style="terp_default_Bold_9">Fiscal Position Remark :</para>
</td>
<td>
<para style="terp_default_9">[[ format(o.fiscal_position and o.fiscal_position.note or removeParentNode('blockTable')) ]]</para>
<para style="terp_default_9">[[ format((o.fiscal_position and o.fiscal_position.note) or '') or removeParentNode('blockTable') ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-04-10 04:39+0000\n"
"Last-Translator: digitalsatori <Unknown>\n"
"PO-Revision-Date: 2010-07-13 03:49+0000\n"
"Last-Translator: Black Jack <onetimespeed@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:10+0000\n"
"X-Launchpad-Export-Date: 2010-07-13 03:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_analytic_analysis
@ -21,7 +21,7 @@ msgstr ""
msgid ""
"Number of hours that can be invoiced plus those that already have been "
"invoiced."
msgstr "小时数能加在已开的发票上"
msgstr ""
#. module: account_analytic_analysis
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_user
@ -31,12 +31,12 @@ msgstr "用户的小时数合计"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_invoice_date:0
msgid "Last Invoice Date"
msgstr "最近开票日期"
msgstr ""
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_ca:0
msgid "Computed using the formula: Max Invoice Price - Invoiced Amount."
msgstr "计算公式为:最高发票价格 - 票金额"
msgstr "计算公式为:最高发票价格 - 已开票金额"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_hours:0
@ -44,25 +44,26 @@ msgid "Computed using the formula: Maximum Quantity - Hours Tot."
msgstr "计算公式为:最大数量 - 小时合计"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_all
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_all
msgid "All Analytic Accounts"
msgstr "所有辅助核算项"
msgstr "所有辅助核算项"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_managed_open
#: model:ir.ui.menu,name:account_analytic_analysis.menu_analytic_account_to_valid_open
msgid "My Current Accounts"
msgstr "我的当前科目"
msgstr "我的当前"
#. module: account_analytic_analysis
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "描述视图结构的XML文件无效"
msgstr "无效XML视图结构!"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_invoice_date:0
msgid "Date of the last invoice created for this analytic account."
msgstr "这辅助核算项的最近开票日期"
msgstr "这辅助核算项的最近开票日期"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_theorical:0
@ -83,13 +84,13 @@ msgstr "计算公式:理论收入 - 总费用"
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr "对象名必须要以X_开头并且不能含有特殊字符!"
msgstr "对象名称必须以“x_”开头且不能包含任何特殊字符"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_new
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_new
msgid "New Analytic Account"
msgstr "新的分析科目"
msgstr "新辅助核算项"
#. module: account_analytic_analysis
#: field:account.analytic.account,theorical_margin:0
@ -105,29 +106,29 @@ msgstr "实际利润(%)"
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_all_open
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_all_open
msgid "Current Analytic Accounts"
msgstr "当前分析科目"
msgstr "当前辅助核算项"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_date:0
msgid "Date of the latest work done on this account."
msgstr "这科目的最近的工作完成日期"
msgstr "这的最近的工作完成日期"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_invoiced_date:0
msgid ""
"If invoice from the costs, this is the date of the latest work or cost that "
"have been invoiced."
msgstr "如果是成本发票,最近工作或成本的时间已开出的发票"
msgstr "如果发票来自费用, 这是最近工作日期或已开票的费用"
#. module: account_analytic_analysis
#: model:ir.ui.menu,name:account_analytic_analysis.menu_invoicing
msgid "Invoicing"
msgstr "计价折扣"
msgstr "开发票"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_date:0
msgid "Date of Last Cost/Work"
msgstr "最近的成本/工作 日期"
msgstr "费用或工作的最近日期"
#. module: account_analytic_analysis
#: field:account.analytic.account,total_cost:0
@ -139,7 +140,7 @@ msgstr "总成本"
msgid ""
"Number of hours you spent on the analytic account (from timesheet). It "
"computes on all journal of type 'general'."
msgstr "你的小时数在辅助核算项目(根据时间表).它计算所有普通分类帐."
msgstr "在辅助核算项你花费的小时数(根据时间表). 它在所有类型为普通的记录集合里计算."
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_hours:0
@ -190,8 +191,8 @@ msgid ""
"important data for project manager of services companies.\n"
"Add menu to show relevant information for each manager."
msgstr ""
"修改核算到显示服务公司的项目管理主要时间\n"
"添加菜单显示每个管理的有关信息"
"修改辅助核算项到显示视图, 服务公司项目经理的重要数据\n"
"添加菜单显示每个管理者的相关信息"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_non_invoiced:0
@ -206,12 +207,12 @@ msgstr "总小时"
#. module: account_analytic_analysis
#: model:ir.ui.menu,name:account_analytic_analysis.menu_account
msgid "Analytic Accounts"
msgstr "核算项"
msgstr "辅助核算项"
#. module: account_analytic_analysis
#: model:ir.module.module,shortdesc:account_analytic_analysis.module_meta_information
msgid "report_account_analytic"
msgstr "核算项报表"
msgstr "辅助核算项报表"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_invoiced:0
@ -226,7 +227,7 @@ msgstr "财务项目管理"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_invoiced_date:0
msgid "Date of Last Invoiced Cost"
msgstr "最近的发票成本日期"
msgstr "最近的发票日期"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_to_invoice:0
@ -237,7 +238,7 @@ msgstr "未开票金额"
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_all_pending
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_all_pending
msgid "Pending Analytic Accounts"
msgstr "未决的辅助核算项"
msgstr "未决的辅助核算项"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_invoiced:0

View File

@ -53,6 +53,7 @@
'account_followup_data.xml'
],
'demo_xml': ['account_followup_demo.xml'],
'test': ['test/account_followup.yml'],
'installable': True,
'active': False,
'certificate': '0072481076453',

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2008-11-03 17:56+0000\n"
"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
"PO-Revision-Date: 2010-07-11 09:01+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:11+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_invoice_layout
@ -48,7 +48,7 @@ msgstr "Название"
#. module: account_invoice_layout
#: model:ir.actions.wizard,name:account_invoice_layout.wizard_notify_message
msgid "Invoices with Layout and Message"
msgstr ""
msgstr "Счет-фактура с макетом и сообщением"
#. module: account_invoice_layout
#: rml:account.invoice.layout:0
@ -119,7 +119,7 @@ msgstr "Ссылка на клиента:"
#. module: account_invoice_layout
#: rml:account.invoice.layout:0
msgid ")"
msgstr ""
msgstr ")"
#. module: account_invoice_layout
#: field:account.invoice.line,state:0
@ -209,7 +209,7 @@ msgstr "Продукт"
#. module: account_invoice_layout
#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_1
msgid "Invoices with Layout"
msgstr ""
msgstr "Счет-фактура с макетом"
#. module: account_invoice_layout
#: rml:account.invoice.layout:0

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2008-11-03 18:51+0000\n"
"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
"PO-Revision-Date: 2010-07-11 09:03+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:10+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_payment
@ -39,7 +39,7 @@ msgstr ""
#. module: account_payment
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: account_payment
#: view:payment.line:0
@ -283,7 +283,7 @@ msgstr ""
#. module: account_payment
#: field:payment.line,communication:0
msgid "Communication"
msgstr ""
msgstr "Связь"
#. module: account_payment
#: selection:payment.order,date_prefered:0
@ -309,7 +309,7 @@ msgstr ""
#: view:payment.type:0
#: help:payment.type,name:0
msgid "Payment Type"
msgstr ""
msgstr "Способ оплаты"
#. module: account_payment
#: help:payment.line,amount_currency:0
@ -526,7 +526,7 @@ msgstr ""
#. module: account_payment
#: field:payment.line,company_currency:0
msgid "Company Currency"
msgstr ""
msgstr "Валюта компании"
#. module: account_payment
#: model:ir.ui.menu,name:account_payment.menu_main

View File

@ -1,8 +1,5 @@
-
In order to test account_payment in OpenERP I create a new record Type
-
-
Creating a payment.type record
In order to test account_payment in OpenERP I create a new record Type.
-
!record {model: payment.type, id: payment_type_t0}:
code: T0
@ -127,19 +124,3 @@
- state == 'done'

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-09 16:29+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:15+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account_voucher
@ -36,12 +36,12 @@ msgstr ""
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "State :"
msgstr ""
msgstr "Статус:"
#. module: account_voucher
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: account_voucher
#: rml:voucher.cash_amount:0
@ -61,7 +61,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,company_id:0
msgid "Company"
msgstr ""
msgstr "Компания"
#. module: account_voucher
#: selection:account.move,voucher_type:0
@ -69,17 +69,17 @@ msgstr ""
#: model:ir.actions.act_window,name:account_voucher.action_view_jour_voucher_form
#: model:ir.ui.menu,name:account_voucher.menu_action_view_jour_voucher_form
msgid "Journal Voucher"
msgstr ""
msgstr "Журнальный ваучер"
#. module: account_voucher
#: rml:voucher.cash_receipt.drcr:0
msgid ","
msgstr ""
msgstr ","
#. module: account_voucher
#: view:account.voucher:0
msgid "Set to Draft"
msgstr ""
msgstr "Установить в 'Черновик'"
#. module: account_voucher
#: wizard_button:account.voucher.open,init,open:0
@ -94,13 +94,13 @@ msgstr ""
#. module: account_voucher
#: view:account.move:0
msgid "Total Credit"
msgstr ""
msgstr "Всего кредит"
#. module: account_voucher
#: field:account.voucher,account_id:0
#: field:account.voucher.line,account_id:0
msgid "Account"
msgstr ""
msgstr "Счет"
#. module: account_voucher
#: rml:voucher.cash_amount:0
@ -110,7 +110,7 @@ msgstr ""
#. module: account_voucher
#: field:account.account,level:0
msgid "Level"
msgstr ""
msgstr "Уровень"
#. module: account_voucher
#: view:account.move:0
@ -120,14 +120,14 @@ msgstr "Проводка по счету"
#. module: account_voucher
#: view:account.move:0
msgid "Total Debit"
msgstr ""
msgstr "Всего дебет"
#. module: account_voucher
#: field:account.voucher,amount:0
#: field:account.voucher.line,amount:0
#: rml:voucher.cash_amount:0
msgid "Amount"
msgstr ""
msgstr "Количество"
#. module: account_voucher
#: rml:voucher.cash_amount:0
@ -150,7 +150,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher.line,account_analytic_id:0
msgid "Analytic Account"
msgstr ""
msgstr "Счет аналитического учета"
#. module: account_voucher
#: selection:account.move,voucher_type:0
@ -189,18 +189,18 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Create"
msgstr ""
msgstr "Создать"
#. module: account_voucher
#: selection:account.account,type1:0
#: selection:account.account.template,type1:0
msgid "None"
msgstr ""
msgstr "Отсутствует"
#. module: account_voucher
#: field:account.voucher,number:0
msgid "Number"
msgstr ""
msgstr "Номер"
#. module: account_voucher
#: view:account.move:0
@ -215,13 +215,13 @@ msgstr "Состояние"
#: selection:account.voucher.line,type:0
#: rml:voucher.cash_receipt.drcr:0
msgid "Debit"
msgstr ""
msgstr "Дебет"
#. module: account_voucher
#: field:account.voucher,type:0
#: field:account.voucher.line,type:0
msgid "Type"
msgstr ""
msgstr "Тип"
#. module: account_voucher
#: model:ir.ui.menu,name:account_voucher.menu_action_voucher_list
@ -245,7 +245,7 @@ msgstr ""
#: field:account.voucher.line,voucher_id:0
#: model:res.request.link,name:account_voucher.req_link_voucher
msgid "Voucher"
msgstr ""
msgstr "Товарный чек"
#. module: account_voucher
#: wizard_view:account.voucher.open,init:0
@ -273,7 +273,7 @@ msgstr ""
#: field:account.voucher,partner_id:0
#: field:account.voucher.line,partner_id:0
msgid "Partner"
msgstr ""
msgstr "Партнер"
#. module: account_voucher
#: model:ir.ui.menu,name:account_voucher.menu_action_view_bank_pay_voucher_form
@ -289,7 +289,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,currency_id:0
msgid "Currency"
msgstr ""
msgstr "Валюта"
#. module: account_voucher
#: view:account.move:0
@ -317,7 +317,7 @@ msgstr ""
#. module: account_voucher
#: field:account.account,open_bal:0
msgid "Opening Balance"
msgstr ""
msgstr "Начальное сальдо"
#. module: account_voucher
#: selection:account.voucher,state:0
@ -325,13 +325,13 @@ msgstr ""
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "Draft"
msgstr ""
msgstr "Черновик"
#. module: account_voucher
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "PRO-FORMA"
msgstr ""
msgstr "Проформа"
#. module: account_voucher
#: model:ir.actions.act_window,name:account_voucher.action_receipt_cashreceipt_voucher_list
@ -356,13 +356,13 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,date:0
msgid "Date"
msgstr ""
msgstr "Дата"
#. module: account_voucher
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid ":"
msgstr ""
msgstr ":"
#. module: account_voucher
#: field:account.account,type1:0
@ -387,7 +387,7 @@ msgstr ""
#: selection:account.voucher.line,type:0
#: rml:voucher.cash_receipt.drcr:0
msgid "Credit"
msgstr ""
msgstr "Кредит"
#. module: account_voucher
#: rml:voucher.cash_amount:0
@ -398,7 +398,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,reference_type:0
msgid "Reference Type"
msgstr ""
msgstr "Тип ссылки"
#. module: account_voucher
#: model:ir.model,name:account_voucher.model_account_voucher
@ -408,7 +408,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,period_id:0
msgid "Period"
msgstr ""
msgstr "Период"
#. module: account_voucher
#: model:ir.ui.menu,name:account_voucher.menu_action_payments_bankpay_voucher_list
@ -423,7 +423,7 @@ msgstr "Общая информация"
#. module: account_voucher
#: wizard_field:account.voucher.open,init,period_ids:0
msgid "Periods"
msgstr ""
msgstr "Периоды"
#. module: account_voucher
#: view:account.voucher:0
@ -431,14 +431,14 @@ msgstr ""
#: wizard_button:account.voucher.open,init,end:0
#: selection:account.voucher.open,init,state:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: account_voucher
#: view:account.voucher:0
#: selection:account.voucher,state:0
#: selection:account.voucher.open,init,state:0
msgid "Pro-forma"
msgstr ""
msgstr "Проформа"
#. module: account_voucher
#: constraint:ir.model:0
@ -451,7 +451,7 @@ msgstr ""
#. module: account_voucher
#: view:account.voucher:0
msgid "Other Info"
msgstr ""
msgstr "Прочая информация"
#. module: account_voucher
#: model:ir.module.module,shortdesc:account_voucher.module_meta_information
@ -472,13 +472,13 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher.line,name:0
msgid "Description"
msgstr ""
msgstr "Описание"
#. module: account_voucher
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "Canceled"
msgstr ""
msgstr "Отменено"
#. module: account_voucher
#: selection:account.move,voucher_type:0
@ -493,13 +493,13 @@ msgstr ""
#. module: account_voucher
#: model:ir.actions.act_window,name:account_voucher.action_receipt_bakreceipt_voucher_list
msgid "Bank Receipt"
msgstr ""
msgstr "Квитанция банка"
#. module: account_voucher
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "-"
msgstr ""
msgstr "-"
#. module: account_voucher
#: selection:account.move,voucher_type:0
@ -518,7 +518,7 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher.line,ref:0
msgid "Ref."
msgstr ""
msgstr "Ссылка"
#. module: account_voucher
#: selection:account.voucher,state:0
@ -526,12 +526,12 @@ msgstr ""
#: rml:voucher.cash_amount:0
#: rml:voucher.cash_receipt.drcr:0
msgid "Posted"
msgstr ""
msgstr "Проведено"
#. module: account_voucher
#: field:account.voucher,name:0
msgid "Name"
msgstr ""
msgstr "Название"
#. module: account_voucher
#: field:account.voucher,move_ids:0
@ -546,12 +546,12 @@ msgstr ""
#. module: account_voucher
#: field:account.voucher,move_id:0
msgid "Account Entry"
msgstr ""
msgstr "Проводка по счету"
#. module: account_voucher
#: view:account.voucher:0
msgid "Entry Lines"
msgstr ""
msgstr "Строки проводок"
#. module: account_voucher
#: model:ir.ui.menu,name:account_voucher.menu_action_view_bank_rec_voucher_form
@ -597,4 +597,4 @@ msgstr ""
#: field:account.account,journal_id:0
#: field:account.voucher,journal_id:0
msgid "Journal"
msgstr ""
msgstr "Журнал"

View File

@ -428,15 +428,17 @@ class account_voucher_line(osv.osv):
'type': lambda *a: 'cr'
}
def onchange_partner(self, cr, uid, ids, partner_id, ttype ,type1):
vals = {}
def onchange_partner(self, cr, uid, ids, partner_id, ttype ,type1, currency):
currency_pool = self.pool.get('res.currency')
company = self.pool.get('res.users').browse(cr, uid, uid).company_id
vals = {
'account_id': False,
'type': False ,
'amount': False
}
if not partner_id:
vals.update({
'account_id': False,
'type': False ,
'amount': False
})
return {
'value' : vals
}
@ -466,6 +468,9 @@ class account_voucher_line(osv.osv):
balance = partner.debit
ttype = 'cr'
if company.currency_id != currency:
balance = currency_pool.compute(cr, uid, company.currency_id.id, currency, balance)
vals.update({
'account_id': account_id,
'type': ttype,

View File

@ -37,7 +37,7 @@
<page string="Journal Entries">
<field name="payment_ids" colspan="4" nolabel="1" height="250">
<tree string="Voucher Lines" editable="top">
<field name="partner_id" on_change="onchange_partner(partner_id,type,parent.type)"/>
<field name="partner_id" on_change="onchange_partner(partner_id,type,parent.type, parent.currency_id)"/>
<field name="account_id"/>
<field name="name"/>
<field name="type"/>

View File

@ -10,7 +10,7 @@
<field name="payment_ids" position="replace">
<field name="voucher_line_ids" default_get="{'lines': voucher_line_ids}" colspan="4" nolabel="1" height="275">
<tree string="Voucher Lines" editable="top">
<field name="partner_id" on_change="onchange_partner(partner_id, type, parent.type)"/>
<field name="partner_id" on_change="onchange_partner(partner_id,type,parent.type, parent.currency_id)"/>
<field name="account_id" on_change="onchange_line_account(account_id, type, parent.type)"/>
<field name="name"/>
<field name="invoice_id" on_change="onchange_invoice_id(invoice_id, parent.currency_id)" domain="[('partner_id','=',partner_id),('state','=','open'),('residual','&gt;',0.0)]"/>

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 08:33+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:18+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:17+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: analytic_journal_billing_rate
@ -24,7 +24,7 @@ msgstr "Неправильный XML для просмотра архитект
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,journal_id:0
msgid "Analytic Journal"
msgstr ""
msgstr "Книга аналитики"
#. module: analytic_journal_billing_rate
#: constraint:ir.model:0
@ -42,7 +42,7 @@ msgstr ""
#. module: analytic_journal_billing_rate
#: field:analytic_journal_rate_grid,account_id:0
msgid "Analytic Account"
msgstr ""
msgstr "Счет аналитического учета"
#. module: analytic_journal_billing_rate
#: model:ir.model,name:analytic_journal_billing_rate.model_analytic_journal_rate_grid

View File

@ -90,7 +90,6 @@ class wiz_auc_lots_buyer_map(osv.osv_memory):
for rec in recs:
if rec.ach_login==datas['ach_login']:
lots_obj.write(cr, uid, [rec.id], {'ach_uid': datas['ach_uid']}, context=context)
cr.commit()
return {}
def fields_view_get(self, cr, uid, view_id=None, view_type='form',

View File

@ -73,7 +73,6 @@ class auction_lots_make_invoice(osv.osv_memory):
result = mod_obj._get_id(cr, uid, 'account', 'view_account_invoice_filter')
id = mod_obj.read(cr, uid, result, ['res_id'])
lots_ids = order_obj.seller_trans_create(cr, uid, context['active_ids'], context)
cr.commit()
return {
'domain': "[('id','in', ["+','.join(map(str, lots_ids))+"])]",
'name': 'Seller invoices',

View File

@ -73,7 +73,6 @@ class auction_lots_make_invoice_buyer(osv.osv_memory):
for lot in lots:
up_auction = order_obj.write(cr, uid, [lot.id], {'ach_uid': data['buyer_id']})
lots_ids = order_obj.lots_invoice(cr, uid, context['active_ids'], context, data['number'])
cr.commit()
return {
'domain': "[('id','in', ["+','.join(map(str, lots_ids))+"])]",
'name': 'Buyer invoices',

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 12:33+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:27+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: audittrail
@ -32,12 +32,12 @@ msgstr ""
#. module: audittrail
#: field:audittrail.log.line,log_id:0
msgid "Log"
msgstr ""
msgstr "Журнал"
#. module: audittrail
#: selection:audittrail.rule,state:0
msgid "Subscribed"
msgstr ""
msgstr "Подписка"
#. module: audittrail
#: view:audittrail.log:0
@ -47,7 +47,7 @@ msgstr ""
#. module: audittrail
#: selection:audittrail.log,method:0
msgid "Create"
msgstr ""
msgstr "Создать"
#. module: audittrail
#: wizard_view:audittrail.view.log,init:0
@ -57,27 +57,27 @@ msgstr ""
#. module: audittrail
#: field:audittrail.rule,state:0
msgid "State"
msgstr ""
msgstr "Состояние"
#. module: audittrail
#: selection:audittrail.rule,state:0
msgid "Draft"
msgstr ""
msgstr "Черновик"
#. module: audittrail
#: field:audittrail.log.line,old_value:0
msgid "Old Value"
msgstr ""
msgstr "Старое значение"
#. module: audittrail
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: audittrail
#: model:ir.actions.wizard,name:audittrail.wizard_audittrail_log
msgid "View log"
msgstr ""
msgstr "Просмотреть журнал"
#. module: audittrail
#: model:ir.model,name:audittrail.model_audittrail_log_line
@ -87,7 +87,7 @@ msgstr ""
#. module: audittrail
#: field:audittrail.log,method:0
msgid "Method"
msgstr ""
msgstr "Метод"
#. module: audittrail
#: wizard_field:audittrail.view.log,init,from:0
@ -107,7 +107,7 @@ msgstr ""
#. module: audittrail
#: selection:audittrail.log,method:0
msgid "Write"
msgstr ""
msgstr "Написать"
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail
@ -122,18 +122,18 @@ msgstr ""
#. module: audittrail
#: view:audittrail.rule:0
msgid "Subscribe"
msgstr ""
msgstr "Подписаться"
#. module: audittrail
#: selection:audittrail.log,method:0
msgid "Read"
msgstr ""
msgstr "Читать"
#. module: audittrail
#: field:audittrail.log,object_id:0
#: field:audittrail.rule,object_id:0
msgid "Object"
msgstr ""
msgstr "Объект"
#. module: audittrail
#: view:audittrail.rule:0
@ -162,12 +162,12 @@ msgstr ""
#. module: audittrail
#: field:audittrail.log,timestamp:0
msgid "Date"
msgstr ""
msgstr "Дата"
#. module: audittrail
#: field:audittrail.log,user_id:0
msgid "User"
msgstr ""
msgstr "Пользователь"
#. module: audittrail
#: view:audittrail.log:0
@ -182,7 +182,7 @@ msgstr "Неправильный XML для просмотра архитект
#. module: audittrail
#: field:audittrail.log,name:0
msgid "Name"
msgstr ""
msgstr "Название"
#. module: audittrail
#: field:audittrail.log,line_ids:0
@ -197,7 +197,7 @@ msgstr ""
#. module: audittrail
#: field:audittrail.log.line,field_id:0
msgid "Fields"
msgstr ""
msgstr "Поля"
#. module: audittrail
#: view:audittrail.rule:0
@ -212,7 +212,7 @@ msgstr ""
#. module: audittrail
#: view:audittrail.rule:0
msgid "UnSubscribe"
msgstr ""
msgstr "Отписаться"
#. module: audittrail
#: field:audittrail.rule,log_write:0
@ -232,7 +232,7 @@ msgstr ""
#. module: audittrail
#: selection:audittrail.log,method:0
msgid "Delete"
msgstr ""
msgstr "Удалить"
#. module: audittrail
#: wizard_button:audittrail.view.log,init,open:0
@ -247,7 +247,7 @@ msgstr ""
#. module: audittrail
#: field:audittrail.rule,name:0
msgid "Rule Name"
msgstr ""
msgstr "Название правила"
#. module: audittrail
#: field:audittrail.rule,log_read:0
@ -257,7 +257,7 @@ msgstr ""
#. module: audittrail
#: model:ir.ui.menu,name:audittrail.menu_action_audittrail_log_tree
msgid "Logs"
msgstr ""
msgstr "Журналы"
#. module: audittrail
#: field:audittrail.log.line,new_value:0
@ -292,7 +292,7 @@ msgstr ""
#. module: audittrail
#: field:audittrail.rule,user_id:0
msgid "Users"
msgstr ""
msgstr "Пользователи"
#. module: audittrail
#: field:audittrail.log.line,old_value_text:0
@ -302,7 +302,7 @@ msgstr ""
#. module: audittrail
#: wizard_button:audittrail.view.log,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: audittrail
#: field:audittrail.rule,log_unlink:0

View File

@ -105,8 +105,8 @@ the rule to mark CC(mail to any other person defined in actions)."),
'act_mail_to_email': fields.char('Mail to these Emails', size=128, \
help="Email-id of the persons whom mail is to be sent"),
'act_mail_body': fields.text('Mail body', help="Content of mail"),
'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for mathching name of the resource\
\ne.g.: urgent.* will search for records having name starting with urgent\
'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\
\ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\
\nNote: This is case sensitive search."),
'server_action_id': fields.many2one('ir.actions.server', 'Server Action', help="Describes the action name.\neg:on which object which action to be taken on basis of which condition"),
'filter_id':fields.many2one('ir.filters', 'Filter', required=False),

View File

@ -383,7 +383,7 @@ property or property parameter."),
'rsvp': True,
'cutype': 'individual',
}
def copy(self, cr, uid, id, default=None, context=None):
raise osv.except_osv(_('Warning!'), _('Can not Duplicate'))
@ -419,10 +419,14 @@ property or property parameter."),
event.add('location').value = event_obj.location
if event_obj.rrule:
event.add('rrule').value = event_obj.rrule
if event_obj.user_id:
if event_obj.user_id or event_obj.organizer_id:
event_org = event.add('organizer')
event_org.params['CN'] = [event_obj.user_id.name]
event_org.value = 'MAILTO:' + (event_obj.user_id.user_email or event_obj.user_id.name)
organizer = event_obj.organizer_id
if not organizer:
organizer = event_obj.user_id
event_org.params['CN'] = [organizer.name]
event_org.value = 'MAILTO:' + (organizer.user_email or organizer.name)
if event_obj.alarm_id:
# computes alarm data
valarm = event.add('valarm')
@ -455,14 +459,14 @@ property or property parameter."),
attendee_add.value = 'MAILTO:' + (attendee.email or '')
res = cal.serialize()
return res
def _send_mail(self, cr, uid, ids, mail_to, email_from=tools.config.get('email_from', False), context=None):
"""
Send mail for event invitation to event attendees.
Send mail for event invitation to event attendees.
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of attendees IDs.
@param email_from: Email address for user sending the mail
@param email_from: Email address for user sending the mail
@param context: A standard dictionary for contextual values
@return: True
"""
@ -474,7 +478,7 @@ property or property parameter."),
sign = att.sent_by_uid and att.sent_by_uid.signature or ''
sign = '<br>'.join(sign and sign.split('\n') or [])
res_obj = att.ref
sub = '[%s Invitation][%d] %s' % (company, att.id, res_obj.name)
sub = res_obj.name
att_infos = []
other_invitaion_ids = self.search(cr, uid, [('ref', '=', res_obj._name + ',' + str(res_obj.id))])
for att2 in self.browse(cr, uid, other_invitaion_ids):
@ -495,12 +499,12 @@ property or property parameter."),
if mail_to and email_from:
attach = self.get_ics_file(cr, uid, res_obj, context=context)
tools.email_send(
email_from,
mail_to,
sub,
body,
attach=attach and [('invitation.ics', attach)] or None,
subtype='html',
email_from,
mail_to,
sub,
body,
attach=attach and [('invitation.ics', attach)] or None,
subtype='html',
reply_to=email_from
)
return True
@ -528,31 +532,28 @@ property or property parameter."),
@param uid: the current users ID for security checks,
@param ids: List of calendar attendees IDs
@param *args: Get Tupple value
@param context: A standard dictionary for contextual values
@param context: A standard dictionary for contextual values
"""
return self.write(cr, uid, ids, {'state': 'tentative'}, context)
def do_accept(self, cr, uid, ids, context=None, *args):
"""
Update state of invitation as Accepted and
Update state of invitation as Accepted and
if the invited user is other then event user it will make a copy of this event for invited user
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of calendar attendees IDs.
@param context: A standard dictionary for contextual values
@param context: A standard dictionary for contextual values
@return: True
"""
if not context:
context = {}
for vals in self.browse(cr, uid, ids, context=context):
#user = vals.user_id
#if user:
# mod_obj = self.pool.get(vals.ref._name)
# if vals.ref:
# if vals.ref.user_id.id != user.id:
# defaults = {'user_id': user.id}
# new_event = mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context)
if vals.ref and vals.ref.user_id:
mod_obj = self.pool.get(vals.ref._name)
defaults = {'user_id': vals.user_id.id, 'organizer_id': vals.ref.user_id.id}
new_event = mod_obj.copy(cr, uid, vals.ref.id, default=defaults, context=context)
self.write(cr, uid, vals.id, {'state': 'accepted'}, context)
return True
@ -565,7 +566,8 @@ property or property parameter."),
@param ids: List of calendar attendees IDs
@param *args: Get Tupple value
@param context: A standard dictionary for contextual values """
if not context:
context = {}
return self.write(cr, uid, ids, {'state': 'declined'}, context)
def create(self, cr, uid, vals, context=None):
@ -585,7 +587,6 @@ property or property parameter."),
vals['cn'] = vals.get("cn")
res = super(calendar_attendee, self).create(cr, uid, vals, context)
return res
calendar_attendee()
class res_alarm(osv.osv):
@ -654,9 +655,9 @@ true, it will allow you to hide the event alarm information without removing it.
alarm_ids = res_alarm_obj.search(cr, uid, domain, context=context)
if not alarm_ids:
val = {
'trigger_duration': duration,
'trigger_interval': interval,
'trigger_occurs': occurs,
'trigger_duration': duration,
'trigger_interval': interval,
'trigger_occurs': occurs,
'trigger_related': related,
'name': str(duration) + ' ' + str(interval) + ' ' + str(occurs)
}
@ -690,7 +691,6 @@ true, it will allow you to hide the event alarm information without removing it.
cr.execute('Update %s set base_calendar_alarm_id=%s, alarm_id=%s \
where id=%s' % (model_obj._table, \
alarm_id, basic_alarm.id, data.id))
cr.commit()
return True
def do_alarm_unlink(self, cr, uid, ids, model, context=None):
@ -714,7 +714,6 @@ true, it will allow you to hide the event alarm information without removing it.
alarm_obj.unlink(cr, uid, alarm_ids)
cr.execute('Update %s set base_calendar_alarm_id=NULL, alarm_id=NULL\
where id=%s' % (model_obj._table, datas.id))
cr.commit()
return True
res_alarm()
@ -726,35 +725,35 @@ class calendar_alarm(osv.osv):
__attribute__ = {}
_columns = {
'alarm_id': fields.many2one('res.alarm', 'Basic Alarm', ondelete='cascade'),
'alarm_id': fields.many2one('res.alarm', 'Basic Alarm', ondelete='cascade'),
'name': fields.char('Summary', size=124, help="""Contains the text to be \
used as the message subject for email \
or contains the text to be used for display"""),
or contains the text to be used for display"""),
'action': fields.selection([('audio', 'Audio'), ('display', 'Display'), \
('procedure', 'Procedure'), ('email', 'Email') ], 'Action', \
required=True, help="Defines the action to be invoked when an alarm is triggered"),
required=True, help="Defines the action to be invoked when an alarm is triggered"),
'description': fields.text('Description', help='Provides a more complete \
description of the calendar component, than that \
provided by the "SUMMARY" property'),
provided by the "SUMMARY" property'),
'attendee_ids': fields.many2many('calendar.attendee', 'alarm_attendee_rel', \
'alarm_id', 'attendee_id', 'Attendees', readonly=True),
'alarm_id', 'attendee_id', 'Attendees', readonly=True),
'attach': fields.binary('Attachment', help="""* Points to a sound resource,\
which is rendered when the alarm is triggered for audio,
* File which is intended to be sent as message attachments for email,
* Points to a procedure resource, which is invoked when\
the alarm is triggered for procedure."""),
'res_id': fields.integer('Resource ID'),
'model_id': fields.many2one('ir.model', 'Model'),
'user_id': fields.many2one('res.users', 'Owner'),
'event_date': fields.datetime('Event Date'),
'event_end_date': fields.datetime('Event End Date'),
'trigger_date': fields.datetime('Trigger Date', readonly="True"),
the alarm is triggered for procedure."""),
'res_id': fields.integer('Resource ID'),
'model_id': fields.many2one('ir.model', 'Model'),
'user_id': fields.many2one('res.users', 'Owner'),
'event_date': fields.datetime('Event Date'),
'event_end_date': fields.datetime('Event End Date'),
'trigger_date': fields.datetime('Trigger Date', readonly="True"),
'state':fields.selection([
('draft', 'Draft'),
('run', 'Run'),
('stop', 'Stop'),
('done', 'Done'),
], 'State', select=True, readonly=True),
('draft', 'Draft'),
('run', 'Run'),
('stop', 'Stop'),
('done', 'Done'),
], 'State', select=True, readonly=True),
}
_defaults = {
@ -803,7 +802,7 @@ class calendar_alarm(osv.osv):
current_datetime = datetime.now()
request_obj = self.pool.get('res.request')
alarm_ids = self.search(cr, uid, [('state', '!=', 'done')], context=context)
mail_to = []
for alarm in self.browse(cr, uid, alarm_ids, context=context):
@ -918,10 +917,10 @@ class calendar_event(osv.osv):
return {}
event = self.browse(cr, uid, ids, context=context)[0]
value = {
'duration': 24
'duration': 24
}
return {'value': value}
def onchange_dates(self, cr, uid, ids, start_date, duration=False, end_date=False, allday=False, context=None):
"""Returns duration and/or end date based on values passed
@param self: The object pointer
@ -1084,11 +1083,11 @@ class calendar_event(osv.osv):
'duration': fields.float('Duration', states={'done': [('readonly', True)]}),
'description': fields.text('Description', states={'done': [('readonly', True)]}),
'class': fields.selection([('public', 'Public'), ('private', 'Private'), \
('confidential', 'Confidential')], 'Mark as', states={'done': [('readonly', True)]}),
'location': fields.char('Location', size=264, help="Location of Event", states={'done': [('readonly', True)]}),
('confidential', 'Confidential')], 'Mark as', states={'done': [('readonly', True)]}),
'location': fields.char('Location', size=264, help="Location of Event", states={'done': [('readonly', True)]}),
'show_as': fields.selection([('free', 'Free'), ('busy', 'Busy')], \
'Show as', states={'done': [('readonly', True)]}),
'base_calendar_url': fields.char('Caldav URL', size=264),
'base_calendar_url': fields.char('Caldav URL', size=264),
'state': fields.selection([('tentative', 'Tentative'),
('confirmed', 'Confirmed'),
('cancelled', 'Cancelled')], 'State', readonly=True),
@ -1112,6 +1111,7 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
'vtimezone': fields.related('user_id', 'context_tz', type='char', size=24, \
string='Timezone', store=True),
'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}),
'organizer_id': fields.many2one('res.users', 'Organizer', states={'done': [('readonly', True)]}),
'freq': fields.selection([('None', 'No Repeat'), \
('secondly', 'Secondly'), \
('minutely', 'Minutely'), \
@ -1138,25 +1138,27 @@ e.g.: Every other month on the last Sunday of the month for 10 occurrences:\
('SU', 'Sunday')], 'Weekday'),
'byday': fields.selection([('1', 'First'), ('2', 'Second'), \
('3', 'Third'), ('4', 'Fourth'), \
('5', 'Fifth'), ('-1', 'Last')], 'By day'),
'month_list': fields.selection(months.items(), 'Month'),
'end_date': fields.date('Repeat Until'),
('5', 'Fifth'), ('-1', 'Last')], 'By day'),
'month_list': fields.selection(months.items(), 'Month'),
'end_date': fields.date('Repeat Until'),
'attendee_ids': fields.many2many('calendar.attendee', 'event_attendee_rel', \
'event_id', 'attendee_id', 'Attendees'),
'allday': fields.boolean('All Day', states={'done': [('readonly', True)]}),
'event_id', 'attendee_id', 'Attendees'),
'allday': fields.boolean('All Day', states={'done': [('readonly', True)]}),
'active': fields.boolean('Active', help="If the active field is set to \
true, it will allow you to hide the event alarm information without removing it.")
}
_defaults = {
'state': 'tentative',
'state': 'tentative',
'class': 'public',
'show_as': 'busy',
'freq': 'None',
'select1': 'date',
'interval': 1,
'active': 1,
}
'user_id': lambda self, cr, uid, ctx: uid,
'organizer_id': lambda self, cr, uid, ctx: uid,
}
def open_event(self, cr, uid, ids, context=None):
"""
@ -1185,26 +1187,26 @@ true, it will allow you to hide the event alarm information without removing it.
id4 = data_obj.browse(cr, uid, id4, context=context).res_id
for id in ids:
value = {
'name': _('Event'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'calendar.event',
'view_id': False,
'views': [(id2, 'form'), (id3, 'tree'), (id4, 'calendar')],
'type': 'ir.actions.act_window',
'res_id': base_calendar_id2real_id(id),
'name': _('Event'),
'view_type': 'form',
'view_mode': 'form,tree',
'res_model': 'calendar.event',
'view_id': False,
'views': [(id2, 'form'), (id3, 'tree'), (id4, 'calendar')],
'type': 'ir.actions.act_window',
'res_id': base_calendar_id2real_id(id),
'nodestroy': True
}
return value
def modify_this(self, cr, uid, event_id, defaults, real_date, context=None, *args):
"""Modifies only one event record out of virtual recurrent events
"""Modifies only one event record out of virtual recurrent events
and creates new event as a specific instance of a Recurring Event",
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param event_id: Id of Recurring Event
@param event_id: Id of Recurring Event
@param real_date: Date of event recurrence that is being modified
@param context: A standard dictionary for contextual values
@param *args: Get Tupple Value
@ -1227,7 +1229,7 @@ true, it will allow you to hide the event alarm information without removing it.
def modify_all(self, cr, uid, event_ids, defaults, context=None, *args):
"""
Modifies the recurring event
Modifies the recurring event
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param event_ids: List of crm meetings IDs.
@ -1254,7 +1256,7 @@ true, it will allow you to hide the event alarm information without removing it.
def get_recurrent_ids(self, cr, uid, select, base_start_date, base_until_date, limit=100):
"""Gives virtual event ids for recurring events based on value of Recurrence Rule
This method gives ids of dates that comes between start date and end date of calendar views
This method gives ids of dates that comes between start date and end date of calendar views
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@ -1420,8 +1422,7 @@ true, it will allow you to hide the event alarm information without removing it.
until_date = arg[2]
res = super(calendar_event, self).search(cr, uid, args_without_date, \
offset, limit, order, context, count)
#Search Event ID which are invitted
return self.get_recurrent_ids(cr, uid, res, start_date, until_date, limit)
@ -1560,7 +1561,7 @@ true, it will allow you to hide the event alarm information without removing it.
event_id = [int(event_id)]
for record in self.read(cr, uid, event_id, ['date', 'rrule', 'exdate']):
if record['rrule']:
# Remove one of the recurrent event
# Remove one of the recurrent event
date_new = time.strftime("%Y-%m-%d %H:%M:%S", \
time.strptime(date_new, "%Y%m%d%H%M%S"))
exdate = (record['exdate'] and (record['exdate'] + ',') or '') + ''.join((re.compile('\d')).findall(date_new)) + 'Z'
@ -1586,7 +1587,7 @@ true, it will allow you to hide the event alarm information without removing it.
alarm_obj = self.pool.get('res.alarm')
alarm_obj.do_alarm_create(cr, uid, [res], self._name, 'date', context=context)
return res
def do_tentative(self, cr, uid, ids, context=None, *args):
""" Makes event invitation as Tentative
@param self: The object pointer
@ -1594,10 +1595,10 @@ true, it will allow you to hide the event alarm information without removing it.
@param uid: the current users ID for security checks,
@param ids: List of Event IDs
@param *args: Get Tupple value
@param context: A standard dictionary for contextual values
@param context: A standard dictionary for contextual values
"""
return self.write(cr, uid, ids, {'state': 'tentative'}, context)
def do_cancel(self, cr, uid, ids, context=None, *args):
""" Makes event invitation as Tentative
@param self: The object pointer
@ -1605,7 +1606,7 @@ true, it will allow you to hide the event alarm information without removing it.
@param uid: the current users ID for security checks,
@param ids: List of Event IDs
@param *args: Get Tupple value
@param context: A standard dictionary for contextual values
@param context: A standard dictionary for contextual values
"""
return self.write(cr, uid, ids, {'state': 'cancelled'}, context)
@ -1616,7 +1617,7 @@ true, it will allow you to hide the event alarm information without removing it.
@param uid: the current users ID for security checks,
@param ids: List of Event IDs
@param *args: Get Tupple value
@param context: A standard dictionary for contextual values
@param context: A standard dictionary for contextual values
"""
return self.write(cr, uid, ids, {'state': 'confirmed'}, context)
@ -1760,9 +1761,9 @@ class ir_model(osv.osv):
_inherit = 'ir.model'
def read(self, cr, uid, ids, fields=None, context=None,
def read(self, cr, uid, ids, fields=None, context=None,
load='_classic_read'):
"""
"""
Overrides orm read method.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@ -1809,7 +1810,7 @@ class res_users(osv.osv):
_inherit = 'res.users'
def _get_user_avail(self, cr, uid, ids, context=None):
"""
"""
Get User Availability
@param self: The object pointer
@param cr: the current row, from the database cursor,
@ -1840,7 +1841,7 @@ class res_users(osv.osv):
return res
def _get_user_avail_fun(self, cr, uid, ids, name, args, context=None):
"""
"""
Get User Availability Function
@param self: The object pointer
@param cr: the current row, from the database cursor,

View File

@ -55,7 +55,7 @@
Now I will check that the new job is assigned properly to contact or not
-
!assert {model: res.partner.contact, id: res_partner_contact_williams0}:
- len(job_ids) > 2
- len(job_ids) >= 2
- |
In order to check contacts working at several addresses for different partners
I will create contact with 2 different addresses

View File

@ -48,7 +48,7 @@ class base_setup_config_choice(osv.osv_memory):
user_ids = user_obj.search(cr, uid, [])
users = user_obj.browse(cr, uid, user_ids)
user_str = '\n'.join(map(lambda x: ' - %s: %s / %s' % (x.name, x.login, x.password), users))
return _('The following users have been installed on your database: \n')+ user_str
return _('The following users have been installed : \n')+ user_str
_columns = {
'installed_users':fields.text('Installed Users', readonly=True),

View File

@ -16,7 +16,7 @@
<separator string="" position="vertical" colspan="1" rowspan="8"/>
<group colspan="4" width="400">
<separator string="Installation Done" colspan="4"/>
<label align="0.0" string="Your new database is now fully installed." colspan="4"/>
<label align="0.0" string="Your database is now created." colspan="4"/>
<field name="installed_users" nolabel= "1" colspan="4"/>
</group>
</group>

View File

@ -11,7 +11,7 @@
<attribute name="string">Main Company Setup</attribute>
</form>
<xpath expr="//label[@string='description']" position="attributes">
<attribute name="string">Information of your company will be used to custiomise your documents like Invoices, Sale Orders,...</attribute>
<attribute name="string">Information of your company will be used to custiomise your documents like Invoices, Sale Orders and many more.</attribute>
</xpath>
<xpath expr='//separator[@string="title"]' position='attributes'>
<attribute name='string'>Configure Your Company</attribute>
@ -24,23 +24,23 @@
<group colspan="5">
<group colspan="2">
<field name="company_id" invisible="1"/>
<field name="name" required="True"/><field name="account_no"/>
<field name="currency" widget="selection"/><field name="street"/>
<field name="street2"/>
<field name="country_id"/>
<field name="name" required="True"/><field name="website"/>
<field name="street"/><field name="street2"/>
<field name="zip"/>
<field name="state_id"/>
<field name="city"/>
<field name="email"/>
<field name="country_id"/>
<field name="state_id"/>
<field name="phone"/>
<field name="website"/>
<field name="email"/>
<field name="account_no"/>
<field name="currency" widget="selection"/>
</group>
<newline/>
<group colspan="2" groups="base.group_extended">
<separator string="Report Information" colspan="4"/>
<field name="rml_header1" colspan="5"/>
<field name="rml_footer1" colspan="5"/>
<field name="rml_footer2" colspan="5"/>
<group colspan="2" groups="base.group_extended" >
<!-- <separator string="Report Information" colspan="4" />-->
<field name="rml_header1" colspan="5" invisible="1"/>
<field name="rml_footer1" colspan="5" invisible="1"/>
<field name="rml_footer2" colspan="5" invisible="1"/>
<separator colspan="4"
string="Your Logo - Use a size of about 450x150 pixels."/>

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-17 08:51+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 21:40+0000\n"
"Last-Translator: Maciej Jędrusik <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:03+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: base_setup
@ -254,7 +254,7 @@ msgstr "Ulica"
#. module: base_setup
#: wizard_button:base_setup.base_setup,finish,menu:0
msgid "Use Directly"
msgstr ""
msgstr "Użyj bezpośrednio"
#. module: base_setup
#: wizard_button:base_setup.base_setup,init,menu:0

View File

@ -4,9 +4,28 @@
<menuitem icon="terp-graph" id="base.reporting_menu"
name="Reporting" sequence="30" />
<menuitem icon="terp-graph" id="menu_dasboard"
name="Dashboard" sequence="30" />
<!--Board Note Tree View -->
name="Dashboard" sequence="30" />
<!--Board Note Search View -->
<record id="view_board_note_search" model="ir.ui.view">
<field name="name">board.note.search</field>
<field name="model">board.note</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Notes">
<group col="10" colspan="4">
<field name="name" string="Subject"/>
<field name="type" string="Note Type"/>
<field name="date" string="Date"/>
</group>
<newline/>
<group expand="0" colspan="4" string="Group By...">
<filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
</group>
</search>
</field>
</record>
<!--Board Note Tree View -->
<record id="view_board_note_tree" model="ir.ui.view">
<field name="name">board.note.tree</field>
@ -15,10 +34,11 @@
<field name="arch" type="xml">
<tree string="Notes">
<field name="name"/>
<field name="user_id"/>
</tree>
</field>
</record>
<!--Board Note Form View -->
<record id="view_board_note_form" model="ir.ui.view">
@ -31,7 +51,8 @@
<field name="type" select="1" required="1"/>
<field name="user_id" select="1"/>
<field name="date" select="1"/>
<field colspan="4" name="note"/>
<separator string="Notes" colspan="4"/>
<field colspan="4" name="note" nolabel="1"/>
</form>
</field>
</record>
@ -43,6 +64,7 @@
<field name="res_model">board.note</field>
<field name="view_type">form</field>
<field name="view_mode">form,tree</field>
<field name="search_view_id" ref="view_board_note_search"/>
</record>
<!-- Board Tree View -->
@ -72,7 +94,7 @@
name="%(action_board_menu_create)d"
string="Create Menu" type="action"
icon="gtk-justify-fill" />
<field colspan="4" name="line_ids">
<field colspan="4" name="line_ids" nolabel="1">
<tree string="Dashboard View">
<field name="name"/>
<field name="sequence"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<record model="document.directory" id="document.dir_calendars">
<field name="name">Calendars</field>
<field name="calendar_collection">True</field>
@ -14,6 +14,11 @@
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_organizer">
<field name="name">organizer</field>
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_uid">
<field name="name">uid</field>
<field name="type">vevent</field>
@ -58,12 +63,12 @@
<field name="name">valarm</field>
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_vtimezone">
<field name="name">vtimezone</field>
<field name="type">vevent</field>
</record>
<record model="basic.calendar.attributes" id="field_event_priority">
<field name="name">priority</field>
<field name="type">vevent</field>
@ -181,12 +186,12 @@
<field name="name">seq</field>
<field name="type">vtodo</field>
</record>
<record model="basic.calendar.attributes" id="field_todo_vtimezone">
<field name="name">vtimezone</field>
<field name="type">vtodo</field>
</record>
<record model="basic.calendar.attributes" id="field_todo_url">
<field name="name">url</field>
<field name="type">vtodo</field>

View File

@ -228,6 +228,8 @@ class CalDAV(object):
att_data = []
for cal_data in child.getChildren():
if cal_data.name.lower() == 'organizer':
self.ical_set(cal_data.name.lower(), {'name':cal_data.params['CN']}, 'value')
if cal_data.name.lower() == 'attendee':
ctx = context.copy()
if cal_children:
@ -266,7 +268,7 @@ class CalDAV(object):
if not datas:
return
timezones = []
for data in datas:
for data in datas:
tzval = None
vevent = ical.add(name)
for field in self.__attribute__.keys():
@ -307,6 +309,13 @@ class CalDAV(object):
ical = tz_obj.export_cal(cr, uid, None, \
data[map_field], ical, context=context)
timezones.append(data[map_field])
elif field == 'organizer' and data[map_field]:
event_org = vevent.add('organizer')
organizer_id = data[map_field][0]
user_obj = self.pool.get('res.users')
organizer = user_obj.browse(cr, uid, organizer_id, context=context)
event_org.params['CN'] = [organizer.name]
event_org.value = 'MAILTO:' + (organizer.user_email or organizer.name)
elif data[map_field]:
if map_type in ("char", "text"):
if field in ('exdate'):
@ -414,7 +423,7 @@ class CalDAV(object):
return res
class Calendar(CalDAV, osv.osv):
_name = 'basic.calendar'
_name = 'basic.calendar'
_calname = 'calendar'
__attribute__ = {
@ -431,13 +440,13 @@ class Calendar(CalDAV, osv.osv):
'vtimezone': None, # Use: O-n, Type: Collection of Timezone class
}
_columns = {
'name': fields.char("Name", size=64),
'name': fields.char("Name", size=64),
'user_id': fields.many2one('res.users', 'Owner'),
'collection_id': fields.many2one('document.directory', 'Collection', \
required=True),
'type': fields.selection([('vevent', 'Event'), ('vtodo', 'TODO')], \
string="Type", size=64),
'line_ids': fields.one2many('basic.calendar.lines', 'calendar_id', 'Calendar Lines'),
'line_ids': fields.one2many('basic.calendar.lines', 'calendar_id', 'Calendar Lines'),
'create_date': fields.datetime('Created Date'),
'write_date': fields.datetime('Modifided Date'),
}
@ -448,8 +457,8 @@ class Calendar(CalDAV, osv.osv):
if not domain:
domain = []
res = []
ctx_res_id = context.get('res_id', None)
ctx_model = context.get('model', None)
ctx_res_id = context.get('res_id', None)
ctx_model = context.get('model', None)
for cal in self.browse(cr, uid, ids):
for line in cal.line_ids:
if ctx_model and ctx_model != line.object_id.model:
@ -458,13 +467,13 @@ class Calendar(CalDAV, osv.osv):
continue
line_domain = eval(line.domain)
line_domain += domain
if ctx_res_id:
if ctx_res_id:
line_domain += [('id','=',ctx_res_id)]
mod_obj = self.pool.get(line.object_id.model)
data_ids = mod_obj.search(cr, uid, line_domain, context=context)
data_ids = mod_obj.search(cr, uid, line_domain, context=context)
for data in mod_obj.browse(cr, uid, data_ids, context):
ctx = parent and parent.context or None
node = res_node_calendar('%s' %data.id, parent, ctx, data, line.object_id.model, data.id)
node = res_node_calendar('%s' %data.id, parent, ctx, data, line.object_id.model, data.id)
res.append(node)
return res
@ -478,8 +487,8 @@ class Calendar(CalDAV, osv.osv):
"""
if not context:
context = {}
ctx_model = context.get('model', None)
ctx_res_id = context.get('res_id', None)
ctx_model = context.get('model', None)
ctx_res_id = context.get('res_id', None)
ical = vobject.iCalendar()
for cal in self.browse(cr, uid, ids):
for line in cal.line_ids:
@ -488,7 +497,7 @@ class Calendar(CalDAV, osv.osv):
if line.name in ('valarm', 'attendee'):
continue
domain = eval(line.domain)
if ctx_res_id:
if ctx_res_id:
domain += [('id','=',ctx_res_id)]
mod_obj = self.pool.get(line.object_id.model)
data_ids = mod_obj.search(cr, uid, domain, context=context)
@ -496,7 +505,7 @@ class Calendar(CalDAV, osv.osv):
context.update({'model': line.object_id.model,
'calendar_id': cal.id
})
self.__attribute__ = get_attribute_mapping(cr, uid, line.name, context)
self.__attribute__ = get_attribute_mapping(cr, uid, line.name, context)
self.create_ics(cr, uid, datas, line.name, ical, context=context)
return ical.serialize()
@ -511,16 +520,18 @@ class Calendar(CalDAV, osv.osv):
if not context:
context = {}
vals = []
vals = []
ical_data = base64.decodestring(content)
parsedCal = vobject.readOne(ical_data)
if not data_id:
data_id = self.search(cr, uid, [])[0]
data_id = self.search(cr, uid, [])[0]
cal = self.browse(cr, uid, data_id, context=context)
cal_children = {}
count = 0
for line in cal.line_ids:
cal_children[line.name] = line.object_id.model
objs = []
checked = True
for child in parsedCal.getChildren():
if child.name.lower() in cal_children:
context.update({'model': cal_children[child.name.lower()],
@ -528,12 +539,14 @@ class Calendar(CalDAV, osv.osv):
})
self.__attribute__ = get_attribute_mapping(cr, uid, child.name.lower(), context=context)
val = self.parse_ics(cr, uid, child, cal_children=cal_children, context=context)
val.update({'user_id': uid})
vals.append(val)
obj = self.pool.get(cal_children[child.name.lower()])
if hasattr(obj, 'check_import'):
obj.check_import(cr, uid, vals, context=context)
else:
objs.append(cal_children[child.name.lower()])
for obj_name in list(set(objs)):
obj = self.pool.get(obj_name)
if hasattr(obj, 'check_import'):
obj.check_import(cr, uid, vals, context=context)
checked = True
if not checked:
self.check_import(cr, uid, vals, context=context)
return {}
Calendar()

View File

@ -29,21 +29,69 @@
</graph>
</field>
</record>
<record model="ir.ui.view" id="crm_case_my_open_oppor">
<field name="name">My Open Opportunities</field>
<field name="model">crm.lead</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Opportunities" colors="blue:state=='pending';grey:state in ('cancel', 'done');red:date_deadline and (date_deadline &lt; current_date)">
<field name="name" string="Opportunity"/>
<field name="partner_id"/>
<field name="stage_id"/>
<button name="stage_previous" string="Previous Stage"
states="open,pending" type="object" icon="gtk-go-back" />
<button name="stage_next" string="Next Stage"
states="open,pending" type="object"
icon="gtk-go-forward" />
<field name="planned_revenue" sum="Total of Planned Revenue"/>
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
<field name="date_deadline" invisible="1"/>
<field name="state"/>
<button name="case_open" string="Open"
states="draft,pending" type="object"
icon="gtk-go-forward" />
<button name="case_pending" string="Pending"
states="open,draft" type="object"
icon="gtk-media-pause" />
<button name="case_mark_lost" string="Lost"
states="open,pending" type="object"
icon="gtk-cancel" />
<button name="case_close" string="Won"
states="open,draft,pending" type="object"
icon="gtk-apply" />
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="act_my_oppor">
<field name="name">My Open Opportunities</field>
<field name="res_model">crm.lead</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="crm.crm_case_tree_view_oppor"/>
<field name="domain">[('user_id','=',uid),('state','=','open'), ('type', '=', 'opportunity')]</field>
</record>
<record model="ir.actions.act_window.view" id="act_my_oppor_tree_view">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="crm_case_my_open_oppor"/>
<field name="act_window_id" ref="act_my_oppor"/>
</record>
<record model="ir.actions.act_window.view" id="act_my_oppor_form_view">
<field name="sequence" eval="2"/>
<field name="view_mode">form</field>
<field name="view_id" ref="crm_case_form_view_oppor"/>
<field name="act_window_id" ref="act_my_oppor"/>
</record>
<record model="ir.actions.act_window" id="act_my_meetings">
<field name="res_model">crm.meeting</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="crm.crm_case_tree_view_meet"/>
<field name="domain">[('user_id','=',uid),('state','!=','cancel'),('date','ilike',time.strftime("%Y-%m"))]</field>
<field name="domain">[('user_id','=',uid),('state','not in',('cancel','done'))]</field>
</record>
<record model="ir.actions.act_window" id="act_my_oppor_stage">
@ -59,7 +107,7 @@
<field name="view_type">form</field>
<field name="view_mode">graph,tree,form</field>
<field name="view_id" ref="view_crm_opportunity_user_graph1"/>
<field name="domain">['&amp;', ('state', '=', 'done') , '&amp;', ('create_date','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%Y-%m-%d')), ('type', '=', 'opportunity')]</field>
<field name="domain">['&amp;', ('user_id', '=', uid),'&amp;', ('state', '=', 'done') , '&amp;', ('create_date','&gt;',(datetime.date.today()-datetime.timedelta(days=365)).strftime('%Y-%m-%d')), ('type', '=', 'opportunity')]</field>
</record>
<record model="ir.ui.view" id="board_crm_form">
@ -84,11 +132,11 @@
</child1>
<child2>
<action
string="Planned Revenues by Stage"
string="My Planned Revenues by Stage"
name="%(act_my_oppor_stage)d"
colspan="4"/>
<action
string="Win/Lost Ratio for the Last Year"
string="My Win/Lost Ratio for the Last Year"
name="%(act_sales_pipeline)d"
colspan="4"/>
</child2>

View File

@ -124,7 +124,7 @@ class crm_case(object):
stage_pool = self.pool.get('crm.case.stage')
for case in self.browse(cr, uid, ids, context):
if section in s:
st = case.stage_id.id or False
st = not context.get('force_domain', False) and case.stage_id.id or False
if st in s[section]:
data = {'stage_id': s[section][st]}
stage = s[section][st]
@ -141,8 +141,12 @@ class crm_case(object):
if not context:
context = {}
stage_obj = self.pool.get('crm.case.stage')
sid = stage_obj.search(cr, uid, \
[('object_id.model', '=', self._name)], context=context)
tmp = self.read(cr, uid, ids, ['section_id'], context)[0]['section_id']
section_id = tmp and tmp[0] or False
domain = [('object_id.model', '=', self._name), ('section_id', '=', section_id)]
if 'force_domain' in context and context['force_domain']:
domain += context['force_domain']
sid = stage_obj.search(cr, uid, domain, context=context)
s = {}
previous = {}
section = self._name
@ -168,7 +172,7 @@ class crm_case(object):
stage_pool = self.pool.get('crm.case.stage')
for case in self.browse(cr, uid, ids, context):
if section in s:
st = case.stage_id.id or False
st = not context.get('force_domain', False) and case.stage_id.id or False
s[section] = dict([(v, k) for (k, v) in s[section].iteritems()])
if st in s[section]:
data = {'stage_id': s[section][st]}
@ -440,7 +444,7 @@ class crm_case_section(osv.osv):
'active': fields.boolean('Active', help="If the active field is set to \
true, it will allow you to hide the sales team without removing it."),
'allow_unlink': fields.boolean('Allow Delete', help="Allows to delete non draft cases"),
'change_responsible': fields.boolean('Change Responsible', help="Set responsible of this Sales team on escalation to this team"),
'change_responsible': fields.boolean('Change Responsible', help="Thick this box if you want that on escalation, the responsible of this sale team automatically becomes responsible of the lead/opportunity escaladed"),
'user_id': fields.many2one('res.users', 'Responsible User'),
'member_ids':fields.many2many('res.users', 'sale_member_rel', 'section_id', 'member_id', 'Team Members'),
'reply_to': fields.char('Reply-To', size=64, help="The email address put \

View File

@ -177,10 +177,18 @@ and users"),
@param ids: List of case's Ids
@param *args: Give Tuple Value
"""
old_state = self.read(cr, uid, ids, ['state'])[0]['state']
res = super(crm_lead, self).case_open(cr, uid, ids, *args)
self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')})
if old_state == 'draft':
stage_id = super(crm_lead, self).stage_next(cr, uid, ids, *args)
if not stage_id:
raise osv.except_osv(_('Warning !'), _('There is no stage defined for this Sale Team.'))
value = self.onchange_stage_id(cr, uid, ids, stage_id, context={})['value']
value.update({'date_open': time.strftime('%Y-%m-%d %H:%M:%S'), 'stage_id': stage_id})
self.write(cr, uid, ids, value)
for (id, name) in self.name_get(cr, uid, ids):
message = _('Lead ') + " '" + name + "' "+ _("is Open.")
message = _('The Lead') + " '" + name + "' "+ _("has been written as Open.")
self.log(cr, uid, id, message)
return res
@ -195,7 +203,7 @@ and users"),
res = super(crm_lead, self).case_close(cr, uid, ids, args)
self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
for (id, name) in self.name_get(cr, uid, ids):
message = _('Lead ') + " '" + name + "' "+ _("is Closed.")
message = _('The Lead') + " '" + name + "' "+ _("has been written as Closed.")
self.log(cr, uid, id, message)
return res

View File

@ -309,7 +309,7 @@
context="{'invisible_section': False}">
<filter icon="terp-personal+"
context="{'invisible_section': False}"
domain="[('section_id.user_id','=',uid)]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="My Sales Team"/>
<filter icon="terp-personal+"
context="{'invisible_section': False}"

View File

@ -107,6 +107,7 @@
<group col="2" colspan="2">
<separator colspan="2" string="Assignment"/>
<field name="user_id" />
<field name="organizer_id" groups="base.group_extended"/>
<field name="section_id" widget="selection"
groups="base.group_extended"/>
</group><group col="2" colspan="2">
@ -154,7 +155,9 @@
<field name="attendee_ids" colspan="4"
nolabel="1" widget="one2many" mode="tree,form">
<tree string="Invitation details" editable="top">
<field name="email" />
<field name="sent_by_uid" string="From"/>
<field name="user_id" string="To"/>
<field name="email" string="Mail TO"/>
<field name="role" select="1" />
<field name="state" />
</tree>
@ -294,7 +297,7 @@
<field name="partner_id" select="1" />
<field name="section_id" select="1" widget="selection">
<filter icon="terp-personal+"
domain="[('section_id','=',context.get('section_id',False))]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="My Sale Team" />
</field>
<field name="user_id" select="1"/>
@ -342,7 +345,7 @@
</field>
</field>
</record>
</data>
</openerp>

View File

@ -64,9 +64,36 @@ class crm_opportunity(osv.osv):
@param *args: Tuple Value for additional Params
"""
res = super(crm_opportunity, self).case_close(cr, uid, ids, args)
self.write(cr, uid, ids, {'probability' : 100.0, 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
stage_id = super(crm_opportunity, self).stage_next(cr, uid, ids, context={'force_domain': [('probability', '=', 100)]})
if not stage_id:
raise osv.except_osv(_('Warning !'), _('There is no stage for won oppportunities defined for this Sale Team.'))
value = self.onchange_stage_id(cr, uid, ids, stage_id, context={})['value']
value.update({'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), 'stage_id': stage_id})
self.write(cr, uid, ids, value)
for (id, name) in self.name_get(cr, uid, ids):
message = _('Opportunity ') + " '" + name + "' "+ _("is Won.")
message = _('The Opportunity') + " '" + name + "' "+ _("has been written as Won.")
self.log(cr, uid, id, message)
return res
def case_mark_lost(self, cr, uid, ids, *args):
"""Mark the case as lost: state = done and probability = 0%
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
res = super(crm_opportunity, self).case_close(cr, uid, ids, args)
stage_id = super(crm_opportunity, self).stage_next(cr, uid, ids, context={'force_domain': [('probability', '=', 0)]})
if not stage_id:
raise osv.except_osv(_('Warning !'), _('There is no stage for lost oppportunities defined for this Sale Team.'))
value = self.onchange_stage_id(cr, uid, ids, stage_id, context={})['value']
value.update({'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), 'stage_id': stage_id})
res = self.write(cr, uid, ids, value)
for (id, name) in self.name_get(cr, uid, ids):
message = _('The Opportunity') + " '" + name + "' "+ _("has been written as Lost.")
self.log(cr, uid, id, message)
return res
@ -80,13 +107,23 @@ class crm_opportunity(osv.osv):
"""
res = super(crm_opportunity, self).case_cancel(cr, uid, ids, args)
self.write(cr, uid, ids, {'probability' : 0.0})
for (id, name) in self.name_get(cr, uid, ids):
message = _('Opportunity ') + " '" + name + "' "+ _("is Lost.")
self.log(cr, uid, id, message)
return res
def case_reset(self, cr, uid, ids, *args):
"""Overrides reset as draft in order to set the stage field as empty
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
res = super(crm_opportunity, self).case_reset(cr, uid, ids, *args)
self.write(cr, uid, ids, {'stage_id': False})
return True
def case_open(self, cr, uid, ids, *args):
"""Overrides cancel for crm_case for setting Open Date
"""Overrides open for crm_case for setting Open Date
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,

View File

@ -65,8 +65,11 @@
<field name="description" nolabel="1" colspan="4"/>
<separator colspan="4"/>
<group col="8" colspan="4">
<group col="10" colspan="4">
<field name="state"/>
<button name="case_reset" string="Reset to New"
states="done,cancel" type="object"
icon="gtk-convert" />
<button name="case_open" string="Open"
states="draft,pending" type="object"
icon="gtk-go-forward" />
@ -74,18 +77,18 @@
states="draft,open" type="object"
icon="gtk-media-pause" />
<button name="case_escalate" string="Escalate"
states="open,draft,pending" type="object"
states="open,pending" type="object"
groups="base.group_extended"
icon="gtk-go-up" />
<button name="case_cancel" string="Mark Lost"
<button name="case_cancel" string="Cancel"
states="draft,open,pending" type="object"
icon="gtk-close" />
<button name="case_mark_lost" string="Mark Lost"
states="open,pending" type="object"
icon="gtk-cancel" />
<button name="case_close" string="Mark Won"
states="open,draft,pending" type="object"
states="open,pending" type="object"
icon="gtk-apply" />
<button name="case_reset" string="Reset to New"
states="done,cancel" type="object"
icon="gtk-convert" />
</group>
</page>
<page string="Lead">
@ -224,15 +227,15 @@
<button name="case_open" string="Open"
states="draft,pending" type="object"
icon="gtk-go-forward" />
<button name="case_close" string="Won"
states="open,draft,pending" type="object"
icon="gtk-apply" />
<button name="case_pending" string="Pending"
states="open,draft" type="object"
icon="gtk-media-pause" />
<button name="case_cancel" string="Lost"
states="draft,open,pending" type="object"
<button name="case_mark_lost" string="Lost"
states="open,pending" type="object"
icon="gtk-cancel" />
<button name="case_close" string="Won"
states="open,draft,pending" type="object"
icon="gtk-apply" />
</tree>
</field>
</record>
@ -291,7 +294,7 @@
context="{'invisible_section': False}"
widget="selection">
<filter icon="terp-personal+"
domain="[('section_id.user_id','=',uid)]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
context="{'invisible_section': False}"
help="My Sales Team" />
<filter icon="terp-personal+"

View File

@ -24,6 +24,7 @@ from osv import fields, osv
from tools.translate import _
import crm
import time
from datetime import datetime, timedelta
class crm_phonecall(osv.osv, crm_case):
""" Phonecall Cases """
@ -65,7 +66,7 @@ class crm_phonecall(osv.osv, crm_case):
('object_id.model', '=', 'crm.phonecall')]"),
'date_open': fields.datetime('Opened', readonly=True),
# phonecall fields
'duration': fields.float('Duration'),
'duration': fields.float('Duration', help="Duration in Minutes"),
'categ_id': fields.many2one('crm.case.categ', 'Category', \
domain="[('section_id','=',section_id),\
('object_id.model', '=', 'crm.phonecall')]"),
@ -113,10 +114,29 @@ class crm_phonecall(osv.osv, crm_case):
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
res = super(crm_phonecall, self).case_close(cr, uid, ids, args)
self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
for phone in self.browse(cr, uid, ids):
phone_id= phone.id
data = {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')}
if phone.duration <=0:
duration = datetime.now() - datetime.strptime(phone.date, '%Y-%m-%d %H:%M:%S')
data.update({'duration': duration.seconds/float(60)})
res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], args)
self.write(cr, uid, ids, data)
return res
def case_reset(self, cr, uid, ids, *args):
"""Resets case as draft
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case Ids
@param *args: Tuple Value for additional Params
"""
res = super(crm_phonecall, self).case_reset(cr, uid, ids, args)
self.write(cr, uid, ids, {'duration': 0.0})
return res
def case_open(self, cr, uid, ids, *args):
"""Overrides cancel for crm_case for setting Open Date
@param self: The object pointer

View File

@ -273,7 +273,7 @@
<field name="section_id"
select="1" widget="selection" string="Sales Team">
<filter icon="terp-personal+"
domain="[('section_id','=',context.get('section_id',False))]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="My Sale Team" />
</field>
<newline/>

View File

@ -11,9 +11,7 @@
<field name="name"/>
<field name="menu_parent_id"/>
<field name="section_id"/>
<label string="This wizard will create all sub-menus, within the selected menu." align="0.0" colspan="4"/>
<label string="You may want to create a new parent menu to put all the created menus in." align="0.0" colspan="4"/>
<separator string="Select Views (Empty for default)" colspan="4"/>
<separator string="Select Views (Empty for Default)" colspan="4"/>
<field name="view_form"/>
<field name="view_tree"/>
<field name="view_calendar"/>

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<data noupdate="1">
<!-- Event Attribute mapping for Calendar-->
@ -22,13 +22,20 @@
<field name="calendar_id" ref="caldav.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.alarm')]" />
</record>
<record model="basic.calendar.lines" id="base_calendar.calendar_lines_attendee">
<field name="name">attendee</field>
<field name="calendar_id" ref="caldav.basic_calendar1" />
<field name="object_id" search="[('model','=','calendar.attendee')]" />
</record>
<record model="basic.calendar.fields" id="map_event_0">
<field name="name" ref="caldav.field_event_organizer"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','organizer_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_1">
<field name="name" ref="caldav.field_event_uid"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
@ -42,7 +49,7 @@
<field name="field_id" search="[('name','=','recurrent_id'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
<record model="basic.calendar.fields" id="map_event_3">
<field name="name" ref="caldav.field_event_vtimezone"/>
<field name="type_id" ref="base_calendar.calendar_lines_event" />
@ -55,7 +62,7 @@
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','attendee_ids'),('model_id.model','=','crm.meeting')]" />
<field name="fn">field</field>
</record>
</record>
<record model="basic.calendar.fields" id="map_event_5">
<field name="name" ref="caldav.field_event_rrule"/>
@ -154,7 +161,7 @@
<field name="type_id" ref="base_calendar.calendar_lines_event" />
<field name="field_id" search="[('name','=','name'),('model_id.model','=','calendar.event')]" />
<field name="fn">field</field>
</record>
</record>
@ -313,7 +320,7 @@
<field name="fn">field</field>
</record>
</data>
</openerp>

View File

@ -45,42 +45,6 @@ class crm_claim_report(osv.osv):
_name = "crm.claim.report"
_auto = False
_description = "CRM Claim Report"
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
""" @param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case and section Datas IDs
@param context: A standard dictionary for contextual values """
res = {}
state_perc = 0.0
avg_ans = 0.0
for case in self.browse(cr, uid, ids, context):
if field_name != 'avg_answers':
state = field_name[5:]
cr.execute("select count(*) from crm_opportunity where \
section_id =%s and state='%s'"%(case.section_id.id, state))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr)) * 100
res[case.id] = perc_state
else:
model_name = self._name.split('report.')
if len(model_name) < 2:
res[case.id] = 0.0
else:
model_name = model_name[1]
cr.execute("select count(*) from crm_case_log l, ir_model m \
where l.model_id=m.id and m.model = '%s'" , model_name)
logs = cr.fetchone()[0]
avg_ans = logs / case.nbr
res[case.id] = avg_ans
return res
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
@ -88,9 +52,6 @@ class crm_claim_report(osv.osv):
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@ -137,9 +98,6 @@ class crm_claim_report(osv.osv):
c.company_id,
c.categ_id,
count(*) as nbr,
0 as avg_answers,
0.0 as perc_done,
0.0 as perc_cancel,
c.priority as priority,
c.type_id as type_id,
date_trunc('day',c.create_date) as create_date,

View File

@ -291,7 +291,7 @@
</field>
<field name="section_id" select="1" widget="selection" string="Sales Team">
<filter icon="terp-personal+"
domain="[('section_id','=',context.get('section_id',False))]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="My section" />
</field>
</group>

View File

@ -36,42 +36,6 @@ class crm_fundraising_report(osv.osv):
_name = "crm.fundraising.report"
_auto = False
_description = "CRM Fundraising Report"
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
""" @param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case and section Datas IDs
@param context: A standard dictionary for contextual values """
res = {}
state_perc = 0.0
avg_ans = 0.0
for case in self.browse(cr, uid, ids, context):
if field_name != 'avg_answers':
state = field_name[5:]
cr.execute("select count(*) from crm_opportunity where \
section_id =%s and state='%s'"%(case.section_id.id, state))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr)) * 100
res[case.id] = perc_state
else:
model_name = self._name.split('report.')
if len(model_name) < 2:
res[case.id] = 0.0
else:
model_name = model_name[1]
cr.execute("select count(*) from crm_case_log l, ir_model m \
where l.model_id=m.id and m.model = '%s'" , model_name)
logs = cr.fetchone()[0]
avg_ans = logs / case.nbr
res[case.id] = avg_ans
return res
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
@ -79,9 +43,6 @@ class crm_fundraising_report(osv.osv):
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@ -123,9 +84,6 @@ class crm_fundraising_report(osv.osv):
c.company_id,
c.partner_id,
count(*) as nbr,
0 as avg_answers,
0.0 as perc_done,
0.0 as perc_cancel,
date_trunc('day',c.create_date) as create_date,
sum(planned_revenue) as amount_revenue,
sum(planned_revenue*probability)::decimal(16,2) as amount_revenue_prob,

View File

@ -1,6 +1,61 @@
<?xml version="1.0"?>
<openerp>
<data noupdate="1">
<data noupdate="1">
<record id="crm_helpdesk_wheretodownloadopenerp0" model="crm.helpdesk">
<field model="res.partner.canal" name="canal_id" search="[('name', '=', u'E-mail')]"/>
<field name="som" ref="base.som_normal"/>
<field eval="1" name="active"/>
<field name="user_id" ref="base.user_root"/>
<field name="company_id" ref="base.main_company"/>
<field name="priority">3</field>
<field name="state">draft</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="date">2010-07-04 11:10:36</field>
<field name="name">Download old version of OpenERP? </field>
<field eval="&quot;Is there any link to download old versions of OpenERP?&quot;" name="description"/>
</record>
</data>
</openerp>
<record id="crm_helpdesk_cannotabletoconnecttoserver0" model="crm.helpdesk">
<field model="res.partner.canal" name="canal_id" search="[('name', '=', u'website')]"/>
<field name="som" ref="base.som_fury"/>
<field eval="1" name="active"/>
<field name="user_id" ref="base.user_demo"/>
<field name="company_id" ref="base.main_company"/>
<field name="priority">3</field>
<field name="state">draft</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="date">2010-07-12 11:12:09</field>
<field name="name">Can not able to connect to Server</field>
<field eval="&quot;I am not able to connect Server, Can anyone help?&quot;" name="description"/>
</record>
<record id="crm_helpdesk_documentationforcrm0" model="crm.helpdesk">
<field model="res.partner.canal" name="canal_id" search="[('name', '=', u'phone')]"/>
<field name="som" ref="base.som_happy"/>
<field eval="1" name="active"/>
<field name="user_id" ref="base.user_root"/>
<field name="company_id" ref="base.main_company"/>
<field name="priority">2</field>
<field name="state">draft</field>
<field name="section_id" ref="crm.section_sales_department"/>
<field name="date">2010-07-12 11:13:10</field>
<field name="name">Documentation for CRM?</field>
<field eval="&quot;Can anyone give link of document for CRM&quot;" name="description"/>
</record>
<record id="crm_helpdesk_howtocreateanewmodule0" model="crm.helpdesk">
<field model="res.partner.canal" name="canal_id" search="[('name', '=', u'E-mail')]"/>
<field name="partner_address_id" ref="base.res_partner_address_9"/>
<field name="som" ref="base.som_normal"/>
<field eval="1" name="active"/>
<field name="partner_id" ref="base.res_partner_2"/>
<field name="user_id" ref="base.user_root"/>
<field name="company_id" ref="base.main_company"/>
<field name="priority">3</field>
<field name="state">draft</field>
<field name="date">2010-07-12 11:15:17</field>
<field name="name">How to create a new module</field>
<field eval="&quot;How can I create new module in OpenERP?&quot;" name="description"/>
</record>
</data>
</openerp>

View File

@ -66,8 +66,7 @@
</group>
<separator colspan="4" string="Notes"/>
<field name="description" colspan="4"
nolabel="1" widget="text_tag" readonly="1" />
<field name="description" colspan="4" nolabel="1" />
<separator colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="1"/>
@ -250,7 +249,7 @@
<field name="user_id" select="1" widget="selection"/>
<field name="section_id" select="1" widget="selection" string="Sales Team">
<filter icon="terp-personal+"
domain="[('section_id','=',context.get('section_id',False))]"
domain="['|', ('section_id.user_id','=',uid), ('section_id.member_ids', 'in', [uid])]"
help="My section" />
</field>
<newline/>

View File

@ -38,51 +38,12 @@ class crm_helpdesk_report(osv.osv):
_description = "Helpdesk report after Sales Services"
_auto = False
def _get_data(self, cr, uid, ids, field_name, arg, context={}):
""" @param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of case and section Datas IDs
@param context: A standard dictionary for contextual values """
res = {}
state_perc = 0.0
avg_ans = 0.0
for case in self.browse(cr, uid, ids, context):
if field_name != 'avg_answers':
state = field_name[5:]
cr.execute("select count(*) from crm_opportunity where \
section_id =%s and state='%s'"%(case.section_id.id, state))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr)) * 100
res[case.id] = perc_state
else:
model_name = self._name.split('report.')
if len(model_name) < 2:
res[case.id] = 0.0
else:
model_name = model_name[1]
cr.execute("select count(*) from crm_case_log l, ir_model m \
where l.model_id=m.id and m.model = '%s'" , model_name)
logs = cr.fetchone()[0]
avg_ans = logs / case.nbr
res[case.id] = avg_ans
return res
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'nbr': fields.integer('# of Cases', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@ -122,9 +83,6 @@ class crm_helpdesk_report(osv.osv):
c.priority,
c.date_deadline,
count(*) as nbr,
0 as avg_answers,
0.0 as perc_done,
0.0 as perc_cancel,
to_char(avg(date_closed-c.create_date), 'DD"d" HH24:MI:SS') as delay_close
from
crm_helpdesk c

View File

@ -22,6 +22,7 @@
import delivery
import partner
import wizard
import report
import sale
import stock

View File

@ -35,6 +35,7 @@
'update_xml': [
'security/ir.model.access.csv',
'wizard/delivery_sale_order_view.xml',
'delivery_report.xml',
'delivery_view.xml',
'partner_view.xml'
],

View File

@ -6,7 +6,7 @@
id="report_shipping"
model="stock.picking"
name="sale.shipping"
rml="sale_delivery_report/report/shipping.rml"
rml="delivery/report/shipping.rml"
string="Delivery order"/>
</data>

View File

@ -45,8 +45,9 @@
-
Attach a pdf file in "My document"
-
!python {model: ir.attachment}: |
!python {model: 'ir.attachment'}: |
import tools
import base64
file = open(tools.config['addons_path'] + '/document/test/partner.pdf')
id = self.write(cr, uid, [ref("document_1")], {'datas' : base64.encodestring(file.read())}, context)
pdf_file = open(tools.config['addons_path'] + '/document/test/partner.pdf')
self.write(cr, uid, [ref("document_1")], {'datas_fname': 'partner.pdf', 'datas' : base64.encodestring(pdf_file.read())}, context)

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-29 06:31+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:37+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:17+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document_ics
@ -32,7 +32,7 @@ msgstr ""
#. module: document_ics
#: constraint:document.directory:0
msgid "Error! You can not create recursive Directories."
msgstr ""
msgstr "Ошибка! Вы не можете созадавать вложенные друг в друга директории."
#. module: document_ics
#: field:document.ics.crm.wizard,jobs:0
@ -42,12 +42,12 @@ msgstr ""
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Configure Calendars for CRM Sections"
msgstr ""
msgstr "Конфигурирование Календарей для секции CRM"
#. module: document_ics
#: field:document.ics.crm.wizard,helpdesk:0
msgid "Helpdesk"
msgstr ""
msgstr "Техподдержка"
#. module: document_ics
#: field:document.directory.ics.fields,field_id:0
@ -57,17 +57,17 @@ msgstr ""
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Next"
msgstr ""
msgstr "Далее"
#. module: document_ics
#: field:document.directory.ics.fields,content_id:0
msgid "Content"
msgstr ""
msgstr "Содержание"
#. module: document_ics
#: field:document.ics.crm.wizard,meeting:0
msgid "Calendar of Meetings"
msgstr ""
msgstr "Календарь встреч"
#. module: document_ics
#: model:crm.case.section,name:document_ics.section_meeting
@ -77,12 +77,12 @@ msgstr ""
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "url"
msgstr ""
msgstr "адрес URL"
#. module: document_ics
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия"
#. module: document_ics
#: help:document.ics.crm.wizard,bugs:0
@ -111,12 +111,12 @@ msgstr ""
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "description"
msgstr ""
msgstr "описание"
#. module: document_ics
#: model:ir.actions.act_window,name:document_ics.action_view_document_ics_config_directories
msgid "Configure Calendars for Sections "
msgstr ""
msgstr "Конфигурирование Календарей для Секций "
#. module: document_ics
#: help:document.ics.crm.wizard,opportunity:0
@ -142,12 +142,12 @@ msgstr ""
#. module: document_ics
#: field:document.directory.content,ics_object_id:0
msgid "Object"
msgstr ""
msgstr "Объект"
#. module: document_ics
#: constraint:crm.case.section:0
msgid "Error ! You cannot create recursive sections."
msgstr ""
msgstr "Ошибка! Вы не можете создавать рекурсивные секции."
#. module: document_ics
#: model:ir.module.module,shortdesc:document_ics.module_meta_information
@ -157,12 +157,12 @@ msgstr ""
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "location"
msgstr ""
msgstr "местоположение"
#. module: document_ics
#: view:document.directory:0
msgid "ICS Calendar"
msgstr ""
msgstr "Календарь формата ICS"
#. module: document_ics
#: field:document.directory.ics.fields,name:0
@ -172,7 +172,7 @@ msgstr ""
#. module: document_ics
#: model:ir.module.module,description:document_ics.module_meta_information
msgid "Allows to synchronise calendars with others applications."
msgstr ""
msgstr "Разрешает синхронизировать календари с другими приложенями."
#. module: document_ics
#: constraint:ir.ui.view:0
@ -189,7 +189,7 @@ msgstr ""
#. module: document_ics
#: field:document.ics.crm.wizard,name:0
msgid "Name"
msgstr ""
msgstr "Название"
#. module: document_ics
#: help:document.ics.crm.wizard,meeting:0
@ -199,7 +199,7 @@ msgstr ""
#. module: document_ics
#: field:document.directory.content,ics_domain:0
msgid "Domain"
msgstr ""
msgstr "Домен"
#. module: document_ics
#: help:document.ics.crm.wizard,claims:0
@ -221,12 +221,12 @@ msgstr ""
#. module: document_ics
#: view:crm.case:0
msgid "Duration(In Hour)"
msgstr ""
msgstr "Продолжительность(в часах)"
#. module: document_ics
#: field:document.ics.crm.wizard,document_ics:0
msgid "Shared Calendar"
msgstr ""
msgstr "Общий календарь"
#. module: document_ics
#: field:document.ics.crm.wizard,claims:0
@ -248,17 +248,17 @@ msgstr ""
#. module: document_ics
#: field:document.ics.crm.wizard,phonecall:0
msgid "Phone Calls"
msgstr ""
msgstr "Телефонные звонки"
#. module: document_ics
#: field:document.ics.crm.wizard,bugs:0
msgid "Bug Tracking"
msgstr ""
msgstr "Учет ошибок"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "categories"
msgstr ""
msgstr "категории"
#. module: document_ics
#: field:document.ics.crm.wizard,lead:0
@ -273,7 +273,7 @@ msgstr ""
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "created"
msgstr ""
msgstr "создан"
#. module: document_ics
#: field:crm.case,code:0
@ -283,7 +283,7 @@ msgstr ""
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "summary"
msgstr ""
msgstr "сводка"
#. module: document_ics
#: model:ir.model,name:document_ics.model_document_ics_crm_wizard
@ -303,17 +303,17 @@ msgstr ""
#. module: document_ics
#: field:document.directory.content,ics_field_ids:0
msgid "Fields Mapping"
msgstr ""
msgstr "Соответствие полей"
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: document_ics
#: field:document.ics.crm.wizard,opportunity:0
msgid "Business Opportunities"
msgstr ""
msgstr "Возможные сделки"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0

View File

@ -118,8 +118,8 @@ class email_template_send_wizard(osv.osv_memory):
'full_success': lambda *a: False
}
def fields_get(self, cr, uid, fields=None, context=None, read_access=True):
result = super(email_template_send_wizard, self).fields_get(cr, uid, fields, context, read_access)
def fields_get(self, cr, uid, fields=None, context=None, write_access=True):
result = super(email_template_send_wizard, self).fields_get(cr, uid, fields, context, write_access)
if 'attachment_ids' in result and 'src_model' in context:
result['attachment_ids']['domain'] = [('res_model','=',context['src_model']),('res_id','=',context['active_id'])]
return result

View File

@ -53,7 +53,7 @@ class event_event(osv.osv):
def copy(self, cr, uid, id, default=None, context=None):
""" Copy record of Given id
@param id: Id of Event Registration type record.
@param id: Id of Event record.
@param context: A standard dictionary for contextual values
"""
if not default:
@ -65,7 +65,13 @@ class event_event(osv.osv):
return super(event_event, self).copy(cr, uid, id, default=default, context=context)
def onchange_product(self, cr, uid, ids, product_id):
"""This function returns value of product's unit price based on product id.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Event IDs
@param product_id: Product's id
"""
if not product_id:
return {'value': {'unit_price': False}}
else:
@ -82,6 +88,13 @@ class event_event(osv.osv):
return self.write(cr, uid, ids, {'state': 'done'}, context=context)
def button_confirm(self, cr, uid, ids, context=None):
"""This Funtion send reminder who had already confirmed their event registration.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Event IDs
@param return: True
"""
register_pool = self.pool.get('event.registration')
for event in self.browse(cr, uid, ids, context=context):
if event.mail_auto_confirm:
@ -95,14 +108,12 @@ class event_event(osv.osv):
def _get_register(self, cr, uid, ids, fields, args, context=None):
"""
Get Confirm or uncofirm register value.
"""Get Confirm or uncofirm register value.
@param ids: List of Event registration type's id
@param fields: List of function fields(register_current and register_prospect).
@param context: A standard dictionary for contextual values
@return: Dictionary of function fields value.
"""
register_pool = self.pool.get('event.registration')
res = {}
for event in self.browse(cr, uid, ids, context):
@ -116,7 +127,7 @@ class event_event(osv.osv):
state.append('draft')
reg_ids = register_pool.search(cr, uid, [
('event_id', '=', event.id),
('event_id', '=', event.id),
('state', 'in', state)])
if 'register_current' in fields:
@ -157,7 +168,6 @@ class event_event(osv.osv):
register_pool.write(cr, uid, reg_ids, register_values)
return res
_columns = {
'type': fields.many2one('event.type', 'Type', help="Type of Event like Seminar, Exhibition, Conference, Training."),
'register_max': fields.integer('Maximum Registrations', help="Provide Maximun Number of Registrations"),
@ -183,7 +193,6 @@ class event_event(osv.osv):
'country_id': fields.related('address_id', 'country_id',
type='many2one', relation='res.country', string='Country'),
'language': fields.char('Language',size=64),
}
@ -218,7 +227,7 @@ and users by email"),
"badge_partner": fields.char('Badge Partner', size=128),
"event_product": fields.char("Product Name", size=128, required=True),
"tobe_invoiced": fields.boolean("To be Invoiced"),
"invoice_id": fields.many2one("account.invoice", "Invoice"),
"invoice_id": fields.many2one("account.invoice", "Invoice", readonly=True),
'date_closed': fields.datetime('Closed', readonly=True),
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
@ -235,8 +244,8 @@ and users by email"),
def _make_invoice(self, cr, uid, reg, lines, context=None):
""" Create Invoice from Invoice lines
@param reg : Object of event.registration
@param lines: ids of Invoice lines
@param reg : Model of Event Registration
@param lines: Ids of Invoice lines
"""
if context is None:
context = {}
@ -325,11 +334,10 @@ and users by email"),
return new_invoice_ids
def check_confirm(self, cr, uid, ids, context=None):
"""
Check confirm event register on given id.
"""This Function Open Event Registration and send email to user.
@param ids: List of Event registration's IDs
@param context: A standard dictionary for contextual values
@return: Dictionary value which open Confirm registration form.
@return: True
"""
data_pool = self.pool.get('ir.model.data')
unconfirmed_ids = []
@ -360,13 +368,17 @@ and users by email"),
}
return True
def button_reg_close(self, cr, uid, ids, *args):
def button_reg_close(self, cr, uid, ids, *args):
"""This Function Close Event Registration.
"""
registrations = self.browse(cr, uid, ids)
self._history(cr, uid, registrations, _('Done'))
self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
return True
def button_reg_cancel(self, cr, uid, ids, *args):
def button_reg_cancel(self, cr, uid, ids, *args):
"""This Function Cancel Event Registration.
"""
registrations = self.browse(cr, uid, ids)
self._history(cr, uid, registrations, _('Cancel'))
self.write(cr, uid, ids, {'state': 'cancel'})
@ -375,8 +387,8 @@ and users by email"),
def create(self, cr, uid, values, context=None):
""" Overrides orm create method.
"""
event = self.pool.get('event.event').browse(cr, uid, values['event_id'], context=context)
event_obj = self.pool.get('event.event')
event = event_obj.browse(cr, uid, values['event_id'], context=context)
values['date_deadline']= event.date_begin
values['description']= event.mail_confirm
values['currency_id'] = event.currency_id.id
@ -385,9 +397,12 @@ and users by email"),
self._history(cr, uid, registrations, _('Created'))
return res
def write(self, cr, uid, ids, values, context=None):
def write(self, cr, uid, ids, values, context=None):
""" Overrides orm write method.
"""
event_obj = self.pool.get('event.event')
if 'event_id' in values:
event = self.pool.get('event.event').browse(cr, uid, values['event_id'], context=context)
event = event_obj.browse(cr, uid, values['event_id'], context=context)
values['date_deadline']= event.date_begin
values['description']= event.mail_confirm
return super(event_registration, self).write(cr, uid, ids, values, context=context)
@ -439,6 +454,13 @@ and users by email"),
return self.pool.get('account.invoice.line').create(cr, uid, vals)
def onchange_badge_name(self, cr, uid, ids, badge_name):
"""This function returns value of Registration Name based on Partner Badge Name.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Registration IDs
@param badge_name: Badge Name
"""
data ={}
if not badge_name:
@ -448,44 +470,77 @@ and users by email"),
def onchange_contact_id(self, cr, uid, ids, contact, partner):
"""This function returns value of Badge Name , Badge Title based on Partner contact.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Registration IDs
@param contact: Patner Contact IDS
@param partner: Partner IDS
"""
data ={}
if not contact:
return data
contact_id = self.pool.get('res.partner.contact').browse(cr, uid, contact)
contact_obj = self.pool.get('res.partner.contact')
addr_obj = self.pool.get('res.partner.address')
job_obj = self.pool.get('res.partner.job')
contact_id = contact_obj.browse(cr, uid, contact)
data['badge_name'] = contact_id.name
data['badge_title'] = contact_id.title.name
if partner:
partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id', '=', partner)])
job_ids = self.pool.get('res.partner.job').search(cr, uid, [('contact_id', '=', contact), ('address_id', 'in', partner_addresses)])
partner_addresses = addr_obj.search(cr, uid, [('partner_id', '=', partner)])
job_ids = job_obj.search(cr, uid, [('contact_id', '=', contact), ('address_id', 'in', partner_addresses)])
if job_ids:
data['email_from'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).email
data['email_from'] = job_obj.browse(cr, uid, job_ids[0]).email
d = self.onchange_badge_name(cr, uid, ids, data['badge_name'])
data.update(d['value'])
return {'value': data}
def onchange_event(self, cr, uid, ids, event_id, partner_invoice_id):
"""This function returns value of Product Name, Unit Price based on Event.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Registration IDs
@param event_id: Event ID
@param partner_invoice_id: Partner Invoice ID
"""
context={}
if not event_id:
return {'value': {'unit_price': False, 'event_product': False}}
data_event = self.pool.get('event.event').browse(cr, uid, event_id)
event_obj = self.pool.get('event.event')
prod_obj = self.pool.get('product.product')
res_obj = self.pool.get('res.partner')
data_event = event_obj.browse(cr, uid, event_id)
context['currency_id'] = data_event.currency_id.id
if data_event.user_id.id:
return {'value': {'user_id':data_event.user_id.id}}
if data_event.product_id:
if not partner_invoice_id:
unit_price=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
unit_price=prod_obj.price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
return {'value': {'unit_price': unit_price, 'event_product': data_event.product_id.name, 'currency_id': data_event.currency_id.id}}
data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id)
data_partner = res_obj.browse(cr, uid, partner_invoice_id)
context.update({'partner_id': data_partner})
unit_price = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
unit_price = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
return {'value': {'unit_price': unit_price, 'event_product': data_event.product_id.name, 'currency_id': data_event.currency_id.id}}
return {'value': {'unit_price': False, 'event_product': False}}
def onchange_partner_id(self, cr, uid, ids, part, event_id, email=False):
"""This function returns value of Patner Invoice id, Unit Price, badget title based on partner and Event.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Registration IDs
@param event_id: Event ID
@param partner_invoice_id: Partner Invoice ID
"""
job_obj = self.pool.get('res.partner.job')
res_obj = self.pool.get('res.partner')
data={}
data['badge_partner'] = data['contact_id'] = data['partner_invoice_id'] = data['email_from'] = data['badge_title'] = data['badge_name'] = False
@ -496,35 +551,46 @@ and users by email"),
d = self.onchange_partner_invoice_id(cr, uid, ids, event_id, part)
# this updates the dictionary
data.update(d['value'])
addr = self.pool.get('res.partner').address_get(cr, uid, [part])
addr = res_obj.address_get(cr, uid, [part])
if addr:
if addr.has_key('default'):
job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id', '=', addr['default'])])
job_ids = job_obj.search(cr, uid, [('address_id', '=', addr['default'])])
if job_ids:
data['contact_id'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).contact_id.id
data['contact_id'] = job_obj.browse(cr, uid, job_ids[0]).contact_id.id
d = self.onchange_contact_id(cr, uid, ids, data['contact_id'], part)
data.update(d['value'])
partner_data = self.pool.get('res.partner').browse(cr, uid, part)
partner_data = res_obj.browse(cr, uid, part)
data['badge_partner'] = partner_data.name
return {'value': data}
def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id):
"""This function returns value of Product unit Price based on Invoiced partner.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Registration IDs
@param event_id: Event ID
@param partner_invoice_id: Partner Invoice ID
"""
data={}
context={}
event_obj = self.pool.get('event.event')
prod_obj = self.pool.get('product.product')
res_obj = self.pool.get('res.partner')
data['unit_price']=False
if not event_id:
return {'value': data}
data_event = self.pool.get('event.event').browse(cr, uid, event_id)
data_event = event_obj.browse(cr, uid, event_id)
if data_event.product_id:
data['event_product']=data_event.product_id.name
if not partner_invoice_id:
data['unit_price']=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
data['unit_price']=prod_obj.price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
return {'value': data}
data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id)
data_partner = res_obj.browse(cr, uid, partner_invoice_id)
context.update({'partner_id': data_partner})
data['unit_price'] = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
data['unit_price'] = prod_obj._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
return {'value': data}
return {'value': data}

View File

@ -3,8 +3,8 @@
<data>
<menuitem name="Marketing" id="menu_marketing_event_main" icon="terp-calendar" sequence="9"/>
<menuitem name="Events Organisation" id="menu_event_main" parent="menu_marketing_event_main" />
<!-- EVENTS -->
<!--<menuitem name="Events Organisation" id="menu_event_main" icon="terp-calendar" />-->
<!-- EVENTS/CONFIGURATION/TYPE OF EVENTS -->
<record model="ir.ui.view" id="view_event_type_form">
@ -36,7 +36,6 @@
<menuitem name="Configuration" id="menu_event_config" parent="menu_marketing_event_main" sequence="30" groups="base.group_extended"/>
<menuitem name="Types of Events" id="menu_event_type" action="action_event_type" parent="menu_event_config" groups="base.group_extended,crm.group_crm_manager"/>
<!-- Events Organisation/CONFIGURATION/EVENTS -->
<record model="ir.ui.view" id="view_event_form">
@ -54,23 +53,23 @@
<field name="product_id" on_change="onchange_product(product_id)"/>
</group>
<notebook colspan="4">
<page string="General">
<page string="Event Information">
<separator string="Description" colspan="4"/>
<field name="unit_price"/>
<field name="currency_id"/>
<separator string="Speaker Information" colspan="4"/>
<field name="main_speaker_id" domain="[('speaker','=',True)]"/>
<field name="address_id"/>
<field name="speaker_ids" domain="[('speaker','=',True)]" colspan="4"/>
<field name="country_id" />
<field name="speaker_confirmed"/>
<field name="language"/>
<separator string="Event description" colspan="4"/>
<field name="parent_id" domain="[('parent_id','child_of','Event')]"/>
<field name="active"/>
<field name="register_min"/>
<field name="register_max"/>
<separator string="Notes" colspan="4"/>
<!--field name="note" colspan="4" nolabel="1"/-->
<field name="parent_id" domain="[('parent_id','child_of','Event')]"/>
<field name="active"/>
<separator string="Location" colspan="4"/>
<field name="country_id" />
<field name="language"/>
<field name="address_id"/>
<separator string="Speaker Information" colspan="4"/>
<field name="main_speaker_id" domain="[('speaker','=',True)]"/>
<field name="speaker_confirmed"/>
<field name="speaker_ids" domain="[('speaker','=',True)]" colspan="4"/>
<newline/>
<field name="state" select="1"/>
<group col="4" colspan="2">
<button string="Confirm Event" name="button_confirm" states="draft" type="object" icon="gtk-apply"/>
@ -113,7 +112,7 @@
</field>
</record>
<!-- event.event tree view -->
<!-- Event tree view -->
<record model="ir.ui.view" id="view_event_tree">
<field name="name">event.event.tree</field>
@ -134,6 +133,8 @@
</field>
</record>
<!-- Events Calendar View -->
<record id="view_event_calendar" model="ir.ui.view">
<field name="name">event.event.calendar</field>
<field name="model">event.event</field>
@ -142,12 +143,12 @@
<field name="arch" type="xml">
<calendar color="user_id" date_start="date_begin" string="Event Organization">
<field name="name"/>
<field name="partner_id"/>
<field name="type" widget="selection"/>
</calendar>
</field>
</record>
<!-- Event Graph view -->
<record model="ir.ui.view" id="view_event_graph">
<field name="name">Event Graph</field>
@ -162,6 +163,8 @@
</field>
</record>
<!-- Event Search View -->
<record model="ir.ui.view" id="view_event_search">
<field name="name">Events</field>
<field name="model">event.event</field>
@ -169,8 +172,8 @@
<field name="arch" type="xml">
<search string="Events">
<group col="10" colspan="4">
<filter icon="terp-document-new" string="Draft" name="draft" domain="[('state','=','draft')]" help="Draft Events"/>
<filter icon="terp-camera_test" string="Confirmed" domain="[('state','=','confirm')]" help="Confirmed Events"/>
<filter icon="terp-check" string="Current" name="draft" domain="[('state','in',('draft', 'confirm'))]" help="Current Events"/>
<filter icon="terp-camera_test" string="Open" domain="[('state','=','confirm')]" help="Open Events"/>
<separator orientation="vertical"/>
<field name="name" string="Event" select="1"/>
<field name="state" select="1"/>
@ -294,15 +297,17 @@
</page>
<page string="Emails" groups="base.group_extended">
<group colspan="4">
<field colspan="4" name="email_cc" string="CC"/>
<field colspan="4" name="email_cc" string="CC" widget="char" size="512"/>
</group>
<field name="message_ids" colspan="4" nolabel="1" mode="form,tree">
<form string="Communication history">
<group col="6" colspan="4">
<field name="date"/>
<field name="email_to"/>
<field name="email_from"/>
</group>
<group col="4" colspan="4">
<field name="email_from"/>
<field name="date"/>
<field name="email_to" widget="char" size="512"/>
<field name="email_cc" widget="char" size="512"/>
<field name="name" colspan="4" widget="char" size="512"/>
</group>
<notebook colspan="4">
<page string="Details">
<field name="description" colspan="4" nolabel="1"/>

View File

@ -51,7 +51,7 @@
property_account_receivable: account.a_recv
- |
we create it with a "Conference on OpenERP Offshore Business" event and provide "Beginning date", "Ending Date", "Product" as Concert Ticket.
we create it with a "Conference on OpenERP Offshore Business" event and provide "Beginning date", "Ending Date" and "Product" as Concert Ticket.
-
!record {model: event.event, id: event_event_conference0}:
code: C/004
@ -64,9 +64,9 @@
state: draft
type: 'event_type_conference0'
reply_to: 'info@customer.com'
- |
we set the limit of registrations to this event using "Minimum Registrations" 2 and "Maximum Registrations" 10
we set the limit of registrations to this event using "Minimum Registrations" 2 and "Maximum Registrations" 10.
-
!python {model: event.event}: |
self.write(cr, uid, [ref('event_event_conference0')], {'register_max': 10, 'register_min': 2})
@ -96,7 +96,6 @@
!record {model: event.registration, id: event_registration_registrationjacot0}:
badge_name: Jacot
badge_partner: Mark Johnson
badge_title: M.
contact_id: base_contact.res_partner_contact_jacot0
date_deadline: '2010-06-07 13:39:00'
event_id: event.event_event_conference0
@ -110,11 +109,13 @@
if not then confirmation will fail because its greater then the Maximum registration.
-
!python {model: event.event}: |
from tools.translate import _
obj_register = self.pool.get('event.registration')
event_id1 = self.browse(cr, uid, [ref('event_event_conference0')])[0]
event_id1 = self.browse(cr, uid, ref('event_event_conference0'))
register_ids = obj_register.search(cr, uid, [('event_id', '=', event_id1.id)])
register_id = obj_register.browse(cr, uid, register_ids)[0]
assert register_id.nb_register <= event_id1.register_max
assert register_id.nb_register <= event_id1.register_max, _('NO. of Registration for this event is More than Maximum Registration Defined !')
- |
And Confirm that Registration by click on "Confirm Registration" button of Registraion form.
@ -150,7 +151,6 @@
!record {model: event.registration, id: event_registration_registrationpassot0}:
badge_name: Passot
badge_partner: Mediapole SPRL
badge_title: M.
contact_id: base_contact.res_partner_contact_passot0
date_deadline: '2010-06-07 13:39:00'
email_from: info@mediapole.net
@ -170,10 +170,10 @@
I Check that the total number of confirmed is 2 and unconfirmed registrations 1.
-
!python {model: event.event}: |
obj_event = self.browse(cr, uid, [ref('event_event_conference0')])[0]
assert obj_event.register_current == '2'
assert obj_event.register_prospect == '1'
from tools.translate import _
obj_event = self.browse(cr, uid, ref('event_event_conference0'))
assert obj_event.register_current == 2, "Number of Confirmed Registration for this event is %s"%(obj_event.register_current)
assert obj_event.register_prospect == 1, "Number of Unconfirmed Registration for this event is %s" %(obj_event.register_prospect)
- |
This event is finished by click on "Event Done" button of this event form.
-
@ -186,8 +186,7 @@
!assert {model: event.registration, id: event_registration_registrationjacot0}:
- state == 'open'
- |
Now, I will invoice the participant who have address using "Make Invoices". This wizard will also give the number of invoices are created and rejected.
Create invoice will be linked to Invoice Field available on Payments tab of registrations
Now, I will invoice the participant who have address using "Make Invoices".Create invoice will be linked to Invoice Field available on Payments tab of registrations.
-
!record {model: event.make.invoice, id: event_make_invoice_0}:
@ -198,19 +197,9 @@
!python {model: event.make.invoice}: |
self.make_invoice(cr, uid, [ref("event_make_invoice_0")], {"active_ids": [ref("event_registration_registrationzen0")]})
- |
I check that Invoice for this partner is create or not.
I check that Invoice for this partner is created or not.
-
!python {model: event.registration}: |
obj_event_reg = self.pool.get('event.registration')
obj_lines = self.pool.get('account.invoice.line')
inv_obj = self.pool.get('account.invoice')
data_event_reg = obj_event_reg.browse(cr, uid, [ref('event_registration_registrationzen0')], context=context)[0]
invoice_ids = inv_obj.search(cr, uid, [('partner_id', '=', data_event_reg.partner_invoice_id.id)])
if invoice_ids:
invoice_id = inv_obj.browse(cr, uid, invoice_ids)[0]
line_ids = obj_lines.search(cr, uid, [('product_id', '=', data_event_reg.event_id.product_id.id), ('invoice_id', '=', invoice_id.id), ('price_unit', '=', data_event_reg.unit_price)])
line_id = obj_lines.browse(cr, uid, line_ids)[0]
assert line_id.product_id == data_event_reg.event_id.product_id
assert data_event_reg.partner_id == invoice_id.partner_id
assert invoice_id.address_invoice_id == data_event_reg.partner_address_id
from tools.translate import _
data_event_reg = self.browse(cr, uid, ref('event_registration_registrationzen0'), context=context)
assert data_event_reg.invoice_id, _("Invoices has not been generated for this partner")

View File

@ -47,23 +47,29 @@ class partner_event_registration(osv.osv_memory):
}
def open_registration(self, cr, uid, ids, context=None):
"""This Function Open Registration For Given Event id and Partner.
"""
value = {}
res_obj = self.pool.get('res.partner')
job_obj = self.pool.get('res.partner.job')
event_obj = self.pool.get('event.event')
reg_obj = self.pool.get('event.registration')
mod_obj = self.pool.get('ir.model.data')
record_ids = context and context.get('active_ids', []) or []
addr = res_obj.address_get(cr, uid, record_ids)
contact_id = False
email = False
if addr.has_key('default'):
job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id', '=', addr['default'])])
job_ids = job_obj.search(cr, uid, [('address_id', '=', addr['default'])])
if job_ids:
contact = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0])
contact = job_obj.browse(cr, uid, job_ids[0])
if contact:
contact_id = contact.contact_id.id
email = contact.email
event_obj = self.pool.get('event.event')
reg_obj = self.pool.get('event.registration')
mod_obj = self.pool.get('ir.model.data')
result = mod_obj._get_id(cr, uid, 'event', 'view_registration_search')
res = mod_obj.read(cr, uid, result, ['res_id'])
@ -123,10 +129,11 @@ class partner_event_registration(osv.osv_memory):
return res
def onchange_event_id(self, cr, uid, ids, event_id, context={}):
res = {}
res = {}
event_obj = self.pool.get('event.event')
if event_id:
obj_event = self.pool.get('event.event')
event = obj_event.browse(cr, uid, event_id)
event = event_obj.browse(cr, uid, event_id)
res['value'] = {
'event_type': event.type and event.type.id or False,
'start_date': event.date_begin,

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2010-05-10 13:18+0000\n"
"Last-Translator: Angel Spy <melissadilara@yahoo.com>\n"
"PO-Revision-Date: 2010-07-12 11:46+0000\n"
"Last-Translator: adsiz_1029@hotmail.com <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:15+0000\n"
"X-Launchpad-Export-Date: 2010-07-13 03:49+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr

View File

@ -33,6 +33,7 @@
'depends': ['base', 'hr'],
'update_xml': [
'security/hr_security.xml',
'security/ir.model.access.csv',
'hr_attendance_view.xml',
'hr_attendance_wizard.xml',
'hr_attendance_report.xml',

View File

@ -7,20 +7,20 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-04 06:32+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:42+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:17+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_attendance
#: field:hr.employee,state:0
#: model:ir.model,name:hr_attendance.model_hr_attendance
msgid "Attendance"
msgstr ""
msgstr "Посещаемость"
#. module: hr_attendance
#: constraint:ir.model:0
@ -70,7 +70,7 @@ msgstr "Выход"
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
msgid "Delay"
msgstr ""
msgstr "Задержка"
#. module: hr_attendance
#: wizard_field:hr.si_so,init,name:0
@ -93,7 +93,7 @@ msgstr ""
#. module: hr_attendance
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: hr_attendance
#: model:ir.actions.wizard,name:hr_attendance.print_week
@ -136,17 +136,17 @@ msgstr "Причина действия"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "March"
msgstr ""
msgstr "Март"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "August"
msgstr ""
msgstr "Август"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "May"
msgstr ""
msgstr "Май"
#. module: hr_attendance
#: wizard_field:hr.si_so,so_ask_si,last_time:0
@ -156,7 +156,7 @@ msgstr "Ваш послежний вход"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "June"
msgstr ""
msgstr "Июнь"
#. module: hr_attendance
#: model:ir.actions.wizard,name:hr_attendance.print_month
@ -197,7 +197,7 @@ msgstr "Дата"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "July"
msgstr ""
msgstr "Июль"
#. module: hr_attendance
#: wizard_view:hr.si_so,si_ask_so:0
@ -215,7 +215,7 @@ msgstr ""
#: wizard_field:hr.attendance.print_week,init,init_date:0
#: wizard_field:hr.attendance.report,init,init_date:0
msgid "Starting Date"
msgstr ""
msgstr "Дата начала"
#. module: hr_attendance
#: selection:hr.employee,state:0
@ -230,12 +230,12 @@ msgstr "Отсутствует"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "February"
msgstr ""
msgstr "Февраль"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "October"
msgstr ""
msgstr "Октябрь"
#. module: hr_attendance
#: wizard_field:hr.si_so,si_ask_so,last_time:0
@ -267,7 +267,7 @@ msgstr "Вход"
#. module: hr_attendance
#: wizard_view:hr.attendance.report,init:0
msgid "Analysis Information"
msgstr ""
msgstr "Данные анализа"
#. module: hr_attendance
#: wizard_field:hr.si_so,init,state:0
@ -277,12 +277,12 @@ msgstr "Текущее состояние"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "January"
msgstr ""
msgstr "Январь"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "April"
msgstr ""
msgstr "Апрель"
#. module: hr_attendance
#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance
@ -316,7 +316,7 @@ msgstr ""
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "November"
msgstr ""
msgstr "Ноябрь"
#. module: hr_attendance
#: wizard_view:hr.attendance.report,init:0
@ -326,7 +326,7 @@ msgstr ""
#. module: hr_attendance
#: wizard_field:hr.attendance.report,init,max_delay:0
msgid "Max. Delay (Min)"
msgstr ""
msgstr "Макс. задержка (мин)"
#. module: hr_attendance
#: wizard_view:hr.attendance.print_week,init:0
@ -337,7 +337,7 @@ msgstr ""
#: wizard_field:hr.attendance.print_week,init,end_date:0
#: wizard_field:hr.attendance.report,init,end_date:0
msgid "Ending Date"
msgstr ""
msgstr "Дата окончания"
#. module: hr_attendance
#: wizard_view:hr.si_so,so_ask_si:0
@ -351,12 +351,12 @@ msgstr ""
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "September"
msgstr ""
msgstr "Сентябрь"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "December"
msgstr ""
msgstr "Декабрь"
#. module: hr_attendance
#: view:hr.attendance:0
@ -366,12 +366,12 @@ msgstr ""
#. module: hr_attendance
#: wizard_view:hr.attendance.print_month,init:0
msgid "Select a month"
msgstr ""
msgstr "Выбрать месяц"
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,month:0
msgid "Month"
msgstr ""
msgstr "Месяц"
#. module: hr_attendance
#: model:ir.module.module,description:hr_attendance.module_meta_information
@ -386,7 +386,7 @@ msgstr ""
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,year:0
msgid "Year"
msgstr ""
msgstr "Год"
#. module: hr_attendance
#: wizard_button:hr.attendance.print_month,init,end:0
@ -401,4 +401,4 @@ msgstr "Отмена"
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
msgid "Operation"
msgstr ""
msgstr "Операция"

View File

@ -2,5 +2,5 @@
"access_hr_action_reason_employee","hr action reason employee","model_hr_action_reason","hr_attendance.group_hr_attendance",1,0,0,0
"access_hr_action_reason_employee","hr action reason employee","model_hr_action_reason","hr.group_hr_manager",1,1,1,1
"access_hr_attendance_employee","hr attendance employee","model_hr_attendance","hr_attendance.group_hr_attendance",1,1,1,1
"access_hr_attendance_employee","hr employee attendance sign in out","hr.model_hr_employee","hr_attendance.group_hr_attendance",1,0,0,0
"access_hr_employee_attendance","hr employee attendance sign in out","hr.model_hr_employee","hr_attendance.group_hr_attendance",1,0,0,0
"access_hr_attendance_resource","hr resource attendance sign in out","resource.model_resource_resource","hr_attendance.group_hr_attendance",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_action_reason_employee hr action reason employee model_hr_action_reason hr_attendance.group_hr_attendance 1 0 0 0
3 access_hr_action_reason_employee hr action reason employee model_hr_action_reason hr.group_hr_manager 1 1 1 1
4 access_hr_attendance_employee hr attendance employee model_hr_attendance hr_attendance.group_hr_attendance 1 1 1 1
5 access_hr_attendance_employee access_hr_employee_attendance hr employee attendance sign in out hr.model_hr_employee hr_attendance.group_hr_attendance 1 0 0 0
6 access_hr_attendance_resource hr resource attendance sign in out resource.model_resource_resource hr_attendance.group_hr_attendance 1 0 0 0

View File

@ -50,7 +50,7 @@ class hr_recruitment_report(osv.osv):
for case in self.browse(cr, uid, ids, context):
if field_name != 'avg_answers':
state = field_name[5:]
cr.execute("select count(*) from crm_opportunity where \
cr.execute("select count(*) from crm_lead where \
section_id =%s and state='%s'"%(case.section_id.id, state))
state_cases = cr.fetchone()[0]
perc_state = (state_cases / float(case.nbr)) * 100

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-16 14:20+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:49+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:09+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_timesheet
@ -75,7 +75,7 @@ msgstr "Текущая дата"
#. module: hr_timesheet
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: hr_timesheet
#: wizard_button:hr.analytical.timesheet,init,report:0
@ -120,7 +120,7 @@ msgstr "Книга аналитики"
#. module: hr_timesheet
#: model:product.uom,name:hr_timesheet.uom_hour
msgid "Hour"
msgstr ""
msgstr "Час"
#. module: hr_timesheet
#: model:ir.actions.wizard,name:hr_timesheet.wizard_hr_timesheet
@ -214,7 +214,7 @@ msgstr "Общая стоимость"
#. module: hr_timesheet
#: model:product.uom,name:hr_timesheet.uom_day
msgid "Day"
msgstr ""
msgstr "День"
#. module: hr_timesheet
#: wizard_field:hr_timesheet.si_so,sign_in,date:0
@ -242,6 +242,8 @@ msgstr "Позиция аналитики"
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
msgstr ""
"Ошибка. Единицы продажи и единицы измерения должны принадлежать к разным "
"категориям."
#. module: hr_timesheet
#: wizard_view:hr.analytical.timesheet_users,init:0
@ -448,7 +450,7 @@ msgstr "Пользователи"
#. module: hr_timesheet
#: model:product.uom.categ,name:hr_timesheet.uom_categ_wtime
msgid "Working Time"
msgstr ""
msgstr "Время работы"
#. module: hr_timesheet
#: view:account.analytic.account:0

View File

@ -2,3 +2,4 @@
"access_hr_analytic_timesheet","hr.analytic.timesheet","model_hr_analytic_timesheet","hr.group_hr_user",1,1,1,1
"access_hr_account_analytic_line","account.account.analytic.line","account.model_account_analytic_line","hr.group_hr_user",1,1,1,0
"access_account_analytic_journal","account.account.analytic.journal","account.model_account_analytic_journal","hr.group_hr_user",1,0,0,0
"access_product_product_user","product.product user","product.model_product_product","hr.group_hr_user",1,0,0,0

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_hr_analytic_timesheet hr.analytic.timesheet model_hr_analytic_timesheet hr.group_hr_user 1 1 1 1
3 access_hr_account_analytic_line account.account.analytic.line account.model_account_analytic_line hr.group_hr_user 1 1 1 0
4 access_account_analytic_journal account.account.analytic.journal account.model_account_analytic_journal hr.group_hr_user 1 0 0 0
5 access_product_product_user product.product user product.model_product_product hr.group_hr_user 1 0 0 0

View File

@ -99,25 +99,11 @@
self.check_state(cr, uid, [ref("hr_employee_fracline1")], {"active_ids": [ref("hr_timesheet.menu_hr_timesheet_sign_in")]})
- |
I select start date and Perform start work on project.
-
!record {model: hr.sign.in.project, id: hr_sign_in_project_francline0}:
emp_id: 'hr_employee_fracline1'
name: Francline
server_date: '2010-06-08 19:50:54'
state: absent
- |
I click on "Start Working" button of this wizard to start work on Project.
-
!python {model: hr.sign.in.project}: |
uid = ref('res_users_user0')
obj_attendance = self.pool.get('hr.employee')
emp_id = obj_attendance.search(cr, uid, [('user_id', '=', uid), ('name', '=', "Francline")])
if emp_id:
employee = obj_attendance.read(cr, uid, emp_id)[0]
self.write(cr, uid, [ref('hr_sign_in_project_francline0')], {'name': employee['name'], 'state': employee['state'], 'emp_id': emp_id[0]})
#self.sign_in_result(cr, uid, [ref("hr_sign_in_project_francline0")], context)
new_id = self.create(cr, uid, {'emp_id': 'hr_employee_fracline1', 'name': 'Francline', 'server_date': '2010-06-08 19:50:54', 'state': 'absent'})
self.sign_in_result(cr, uid, [new_id], context)
- |
My work is done and I want to stop work.for that I click on "Sign In/Sign Out" button of "Sign In/Sign Out by Project" wizard.
@ -125,33 +111,31 @@
-
!python {model: hr.sign.in.project}: |
uid = ref('res_users_user0')
self.check_state(cr, uid, [ref("hr_sign_in_project_francline0")], {"active_ids": [ref("hr_timesheet.menu_hr_timesheet_sign_in")]
ids = self.search(cr, uid, [('emp_id', '=', ref('hr_employee_fracline1')),('name', '=', 'Francline')])
self.check_state(cr, uid, ids, {"active_ids": [ref("hr_timesheet.menu_hr_timesheet_sign_in")]
})
- |
This will Open "hr sign out project" form. I select analytical project2 development account.
-
!record {model: hr.sign.out.project, id: hr_sign_out_project_francline0}:
account_id: account.analytic_project_2_development
analytic_amount: 7.0
date: '2010-05-25 16:40:00'
date_start: '2010-06-05 16:37:00'
info: Create Yaml for hr module
name: Francline
server_date: '2010-06-09 16:40:15'
state: present
-
For that I Creating a analytic account.
-
!record {model: account.analytic.account, id: account_analytic_account_project0}:
company_id: base.main_company
name: Project2
parent_id: account.analytic_root
quantity_max: 0.0
state: open
- |
My work for this project is over and I stop work by click on "Stop Work" button of this wizard.
-
!python {model: hr.sign.out.project}: |
import time
from datetime import datetime, date, timedelta
uid = ref('res_users_user0')
obj_attendance = self.pool.get('hr.employee')
emp_id = obj_attendance.search(cr, uid, [('user_id', '=', uid), ('name', '=', "Francline")])
if emp_id:
employee = obj_attendance.read(cr, uid, emp_id)[0]
self.write(cr, uid, [ref('hr_sign_out_project_francline0')], {'name': employee['name'], 'state': employee['state'], 'emp_id': emp_id[0]})
#self.sign_out_result_end(cr, uid, [ref('hr_sign_out_project_francline0')])
new_id = self.create(cr, uid, {'account_id': ref('account_analytic_account_project0'), 'analytic_amount': 7.0, 'date': (datetime.now()+timedelta(1)).strftime('%Y-%m-%d %H:%M:%S'), 'date_start': '2010-06-05 16:37:00', 'info': 'Create Yaml for hr module', 'name': 'Francline', 'server_date': '2010-06-09 16:40:15', 'state': 'absent'})
self.sign_out_result_end(cr, uid, [new_id], context)
- |
I can see employee timesheet for particular month using "Employee Timesheet" report.

View File

@ -1,19 +1,19 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * hr_timesheet_invoice
# * hr_timesheet_invoice
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-09-08 12:56+0000\n"
"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
"PO-Revision-Date: 2010-07-11 09:48+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:11+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_timesheet_invoice
@ -111,7 +111,7 @@ msgstr ""
#. module: hr_timesheet_invoice
#: wizard_button:hr.timesheet.invoice.create,init,create:0
msgid "Create Invoices"
msgstr ""
msgstr "Создать счета"
#. module: hr_timesheet_invoice
#: rml:account.analytic.profit:0
@ -141,7 +141,7 @@ msgstr "Нужна ли детализация по уаждой позиции
#. module: hr_timesheet_invoice
#: rml:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
msgid "Date or Code"
msgstr ""
msgstr "Дата или Код"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:hr_timesheet_invoice.action_hr_analytic_timesheet_open_tree
@ -201,7 +201,7 @@ msgstr ""
#. module: hr_timesheet_invoice
#: rml:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
msgid "Printing date"
msgstr ""
msgstr "Дата печати"
#. module: hr_timesheet_invoice
#: constraint:ir.ui.view:0
@ -223,7 +223,7 @@ msgstr "Теоретическая"
#: model:ir.actions.act_window,name:hr_timesheet_invoice.action_hr_analytic_timesheet_tree_invoiced_my
#: model:ir.ui.menu,name:hr_timesheet_invoice.menu_hr_analytic_timesheet_tree_invoiced_my
msgid "My Uninvoiced Entries"
msgstr ""
msgstr "Мои необработанные записи"
#. module: hr_timesheet_invoice
#: wizard_field:hr.timesheet.final.invoice.create,init,name:0
@ -239,7 +239,7 @@ msgstr ""
#. module: hr_timesheet_invoice
#: rml:account.analytic.profit:0
msgid "Currency"
msgstr ""
msgstr "Валюта"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.invoice.create,init,product:0
@ -277,17 +277,17 @@ msgstr "От"
#. module: hr_timesheet_invoice
#: help:account.analytic.account,amount_invoiced:0
msgid "Total invoiced"
msgstr ""
msgstr "Сумма счета"
#. module: hr_timesheet_invoice
#: view:account.analytic.account:0
msgid "Status"
msgstr ""
msgstr "Состояние"
#. module: hr_timesheet_invoice
#: rml:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
msgid "Period to"
msgstr ""
msgstr "Период по"
#. module: hr_timesheet_invoice
#: help:hr.timesheet.final.invoice.create,init,balance_product:0
@ -330,7 +330,7 @@ msgstr "Счета аналитики"
#. module: hr_timesheet_invoice
#: rml:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
msgid "Total:"
msgstr ""
msgstr "Всего:"
#. module: hr_timesheet_invoice
#: rml:hr.timesheet.invoice.account.analytic.account.cost_ledger:0
@ -355,7 +355,7 @@ msgstr ""
#. module: hr_timesheet_invoice
#: rml:account.analytic.profit:0
msgid "Totals:"
msgstr ""
msgstr "Итоги:"
#. module: hr_timesheet_invoice
#: wizard_field:account.analytic.profit,init,date_to:0
@ -426,7 +426,7 @@ msgstr "Продукция"
#. module: hr_timesheet_invoice
#: rml:account.analytic.profit:0
msgid "%"
msgstr ""
msgstr "%"
#. module: hr_timesheet_invoice
#: field:hr_timesheet_invoice.factor,name:0
@ -499,7 +499,7 @@ msgid "Max. Quantity"
msgstr "Макс. кол-во"
#. module: hr_timesheet_invoice
#: field:report.account.analytic.line.to.invoice,account_id:0
#: field:report.analytic.account.close,name:0
msgid "Analytic account"
msgstr "Счет аналитики"
@ -516,7 +516,7 @@ msgstr "Срок"
#. module: hr_timesheet_invoice
#: model:ir.module.module,shortdesc:hr_timesheet_invoice.module_meta_information
msgid "Analytic Account Reporting"
msgstr ""
msgstr "Отчет аналитического профиля"
#. module: hr_timesheet_invoice
#: field:report.analytic.account.close,partner_id:0
@ -565,7 +565,7 @@ msgstr "Месяц"
#. module: hr_timesheet_invoice
#: field:report.account.analytic.line.to.invoice,amount:0
msgid "Amount"
msgstr "Сумма"
msgstr "Количество"
#. module: hr_timesheet_invoice
#: model:ir.model,name:hr_timesheet_invoice.model_report_account_analytic_line_to_invoice
@ -575,7 +575,7 @@ msgstr "Отчет по позициям аналитики к выставле
#. module: hr_timesheet_invoice
#: field:report.account.analytic.line.to.invoice,product_uom_id:0
msgid "UoM"
msgstr "Ед. изм."
msgstr "Ед-ца изм."
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:report_timesheet_invoice.action_timesheet_account_date_stat_my
@ -646,7 +646,7 @@ msgstr "Дневной табель по счетам"
#. module: hr_timesheet_invoice
#: field:random.timesheet.lines,name:0 field:report.random.timesheet,name:0
msgid "Description"
msgstr ""
msgstr "Описание"
#. module: hr_timesheet_invoice
#: model:ir.model,name:report_timesheet_invoice.model_report_timesheet_account
@ -667,7 +667,7 @@ msgstr "Табели по счетам"
#. module: hr_timesheet_invoice
#: model:ir.ui.menu,name:report_timesheet_invoice.next_id_69
msgid "This Month"
msgstr "Данный месяц"
msgstr "Этот месяц"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:report_timesheet_invoice.action_timesheet_account_stat_my
@ -767,12 +767,12 @@ msgstr ""
#: field:report_timesheet.account,account_id:0
#: field:report_timesheet.account.date,account_id:0
msgid "Analytic Account"
msgstr "Счет аналитики"
msgstr "Счет аналитического учета"
#. module: hr_timesheet_invoice
#: field:report_timesheet.invoice,manager_id:0
msgid "Manager"
msgstr "Начальник"
msgstr "Менеджер"
#. module: hr_timesheet_invoice
#: model:ir.actions.act_window,name:report_timesheet_invoice.action_timesheet_user_stat

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 11:45+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:44+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:12+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_timesheet_sheet
@ -39,7 +39,7 @@ msgstr "Табель"
#. module: hr_timesheet_sheet
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: hr_timesheet_sheet
#: field:hr_timesheet_sheet.sheet,total_attendance:0
@ -311,7 +311,7 @@ msgstr "Перейти к:"
#. module: hr_timesheet_sheet
#: model:process.node,name:hr_timesheet_sheet.process_node_phonecall0
msgid "Phone call"
msgstr ""
msgstr "Телефонный звонок"
#. module: hr_timesheet_sheet
#: field:hr_timesheet_sheet.sheet,total_timesheet:0
@ -344,7 +344,7 @@ msgstr ""
#: model:process.node,name:hr_timesheet_sheet.process_node_review0
#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_reviewtimesheet0
msgid "Review"
msgstr ""
msgstr "Обзор"
#. module: hr_timesheet_sheet
#: selection:hr_timesheet_sheet.sheet,state:0
@ -447,7 +447,7 @@ msgstr ""
#. module: hr_timesheet_sheet
#: model:process.node,name:hr_timesheet_sheet.process_node_timesheetline0
msgid "Timesheet Line"
msgstr ""
msgstr "Строка табеля"
#. module: hr_timesheet_sheet
#: view:hr_timesheet_sheet.sheet.account:0

View File

@ -1,6 +1,26 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- Idea Categories Search View-->
<record model="ir.ui.view" id="view_idea_category_search">
<field name="name">idea.category.search</field>
<field name="model">idea.category</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Ideas Categories">
<group col="10" colspan="4">
<field name="name" string="Category"/>
<field name="parent_id" widget="selection"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="14">
<filter string="Parent Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'parent_id'}"/>
</group>
</search>
</field>
</record>
<!-- Idea Category Form View -->
<menuitem name="Tools" id="base.menu_tools" icon="STOCK_PREFERENCES" sequence="28"/>
@ -41,6 +61,7 @@
<field name="res_model">idea.category</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_idea_category_search"/>
</record>
<menuitem name="Configuration" parent="base.menu_tools"

View File

@ -6,3 +6,4 @@
"access_idea_category_system","idea.category system","model_idea_category","base.group_system",1,1,1,1
"access_idea_comment","idea.comment","model_idea_comment","base.group_system",1,1,1,1
"access_idea_comment_user","idea.comment","model_idea_comment","base.group_user",1,1,1,0
"access_report_vote","report.vote","model_report_vote","base.group_user",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
6 access_idea_category_system idea.category system model_idea_category base.group_system 1 1 1 1
7 access_idea_comment idea.comment model_idea_comment base.group_system 1 1 1 1
8 access_idea_comment_user idea.comment model_idea_comment base.group_user 1 1 1 0
9 access_report_vote report.vote model_report_vote base.group_user 1 1 1 1

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-11-17 06:56+0000\n"
"Last-Translator: Sergei Kostigoff <sergei.kostigoff@gmail.com>\n"
"PO-Revision-Date: 2010-07-11 09:51+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:12+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_be
@ -31,7 +31,7 @@ msgstr ""
#: wizard_view:vat.intra.xml,go:0
#: wizard_view:wizard.account.xml.vat.declaration,go:0
msgid "Notification"
msgstr ""
msgstr "Уведомления"
#. module: l10n_be
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_1
@ -51,7 +51,7 @@ msgstr ""
#. module: l10n_be
#: model:account.account.type,name:l10n_be.user_type_charge
msgid "Charge"
msgstr ""
msgstr "Затраты"
#. module: l10n_be
#: model:account.fiscal.position.template,name:l10n_be.fiscal_position_template_3
@ -68,14 +68,14 @@ msgstr "Создать XML"
#. module: l10n_be
#: model:account.account.type,name:l10n_be.user_type_capitaux
msgid "Capital"
msgstr ""
msgstr "Столица"
#. module: l10n_be
#: wizard_field:list.vat.detail,go,msg:0
#: wizard_field:vat.intra.xml,go,msg:0
#: wizard_field:wizard.account.xml.vat.declaration,go,msg:0
msgid "File created"
msgstr ""
msgstr "Файл создан"
#. module: l10n_be
#: selection:vat.intra.xml,init,trimester:0
@ -102,7 +102,7 @@ msgstr ""
#: wizard_field:vat.intra.xml,go,file_save:0
#: wizard_field:wizard.account.xml.vat.declaration,go,file_save:0
msgid "Save File"
msgstr ""
msgstr "Сохранить файл"
#. module: l10n_be
#: wizard_view:vat.intra.xml,init:0
@ -165,7 +165,7 @@ msgstr ""
#: wizard_button:vat.intra.xml,go,end:0
#: wizard_button:wizard.account.xml.vat.declaration,go,end:0
msgid "Ok"
msgstr ""
msgstr "Ок"
#. module: l10n_be
#: wizard_view:list.vat.detail,init:0
@ -189,7 +189,7 @@ msgstr ""
#: wizard_field:list.vat.detail,init,fyear:0
#: wizard_field:vat.intra.xml,init,fyear:0
msgid "Fiscal Year"
msgstr ""
msgstr "Финансовый год"
#. module: l10n_be
#: wizard_view:wizard.account.xml.vat.declaration,go:0
@ -233,23 +233,23 @@ msgstr ""
#. module: l10n_be
#: model:account.account.type,name:l10n_be.user_type_tax
msgid "Tax"
msgstr ""
msgstr "Налог"
#. module: l10n_be
#: wizard_field:wizard.account.xml.vat.declaration,init,period:0
msgid "Period"
msgstr ""
msgstr "Период"
#. module: l10n_be
#: wizard_view:vat.intra.xml,init:0
#: wizard_field:vat.intra.xml,init,country_ids:0
msgid "European Countries"
msgstr ""
msgstr "Европейские страны"
#. module: l10n_be
#: wizard_view:vat.intra.xml,init:0
msgid "General Information"
msgstr ""
msgstr "Общая информация"
#. module: l10n_be
#: wizard_view:list.vat.detail,go:0
@ -267,7 +267,7 @@ msgstr "Финансист"
#: wizard_button:vat.intra.xml,init,end:0
#: wizard_button:wizard.account.xml.vat.declaration,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: l10n_be
#: model:ir.actions.wizard,name:l10n_be.partner_vat_intra

View File

@ -7,24 +7,24 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-04-10 14:25+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:54+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:19+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Invoice Date:"
msgstr ""
msgstr "Дата счета:"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "-"
msgstr ""
msgstr "-"
#. module: l10n_ch
#: field:account.journal.todo,name:0
@ -34,7 +34,7 @@ msgstr ""
#. module: l10n_ch
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: l10n_ch
#: model:res.partner.bank.type,name:l10n_ch.bvrpost
@ -45,7 +45,7 @@ msgstr ""
#: rml:l10n_ch.bvr:0
#: rml:l10n_ch.invoice.bvr:0
msgid "Mail:"
msgstr ""
msgstr "Mail:"
#. module: l10n_ch
#: model:ir.actions.wizard,name:l10n_ch.wizard_bvr_import
@ -56,12 +56,12 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.bvr:0
msgid "Thanks,"
msgstr ""
msgstr "Благодарю,"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Base"
msgstr ""
msgstr "Базовый"
#. module: l10n_ch
#: model:ir.actions.report.xml,name:l10n_ch.account_invoice_bvr
@ -71,7 +71,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Refund"
msgstr ""
msgstr "Возвраты"
#. module: l10n_ch
#: model:res.partner.title,name:l10n_ch.res_c_partner_title_mlle
@ -87,7 +87,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Amount"
msgstr ""
msgstr "Количество"
#. module: l10n_ch
#: model:res.partner.bank.type.field,name:l10n_ch.bank_field_bvbank
@ -96,7 +96,7 @@ msgstr ""
#: model:res.partner.bank.type.field,name:l10n_ch.bank_field_bvrpost
#: model:res.partner.bank.type.field,name:l10n_ch.bank_field_iban
msgid "bank"
msgstr ""
msgstr "банк"
#. module: l10n_ch
#: model:ir.actions.wizard,name:l10n_ch.wizard_bvr_check_report
@ -106,7 +106,7 @@ msgstr ""
#. module: l10n_ch
#: wizard_button:account.dta_create,init,end:0
msgid "OK"
msgstr ""
msgstr "Ок"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
@ -116,7 +116,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Tax"
msgstr ""
msgstr "Налог"
#. module: l10n_ch
#: field:res.partner.bank,bvr_number:0
@ -146,7 +146,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Disc. (%)"
msgstr ""
msgstr "Скидка (%)"
#. module: l10n_ch
#: help:account.journal.todo,name:0
@ -156,12 +156,12 @@ msgstr ""
#. module: l10n_ch
#: view:account.journal.todo:0
msgid "Next"
msgstr ""
msgstr "Далее"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Supplier Invoice"
msgstr ""
msgstr "Счета поставщиков"
#. module: l10n_ch
#: constraint:res.partner:0
@ -183,7 +183,7 @@ msgstr ""
#: rml:l10n_ch.bvr:0
#: rml:l10n_ch.invoice.bvr:0
msgid "+"
msgstr ""
msgstr "+"
#. module: l10n_ch
#: model:ir.actions.act_window,name:l10n_ch.action_config_journal
@ -204,7 +204,7 @@ msgstr ""
#. module: l10n_ch
#: view:account.journal.todo:0
msgid "Account Journal"
msgstr ""
msgstr "Журнал счета"
#. module: l10n_ch
#: constraint:ir.ui.view:0
@ -225,12 +225,12 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Draft Invoice"
msgstr ""
msgstr "Черновик счета"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "VAT :"
msgstr ""
msgstr "НДС :"
#. module: l10n_ch
#: model:ir.actions.wizard,name:l10n_ch.wizard_invoice_bvr_check_report
@ -250,17 +250,17 @@ msgstr ""
#. module: l10n_ch
#: constraint:res.partner:0
msgid "Error ! You can not create recursive associated members."
msgstr ""
msgstr "Ошибка! Вы не можете создать рекурсивных связанных участников."
#. module: l10n_ch
#: wizard_button:l10n_ch.bvr_import,init,import:0
msgid "Import"
msgstr ""
msgstr "Импорт"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "PRO-FORMA"
msgstr ""
msgstr "Проформа"
#. module: l10n_ch
#: field:res.partner.bank,bvr_adherent_num:0
@ -271,7 +271,7 @@ msgstr ""
#: rml:l10n_ch.bvr:0
#: rml:l10n_ch.invoice.bvr:0
msgid "Phone:"
msgstr ""
msgstr "Телефон:"
#. module: l10n_ch
#: rml:l10n_ch.bvr:0
@ -296,13 +296,13 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Condition"
msgstr ""
msgstr "Условие"
#. module: l10n_ch
#: rml:l10n_ch.bvr:0
#: rml:l10n_ch.invoice.bvr:0
msgid ">"
msgstr ""
msgstr ">"
#. module: l10n_ch
#: rml:l10n_ch.bvr:0
@ -334,7 +334,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.bvr:0
msgid "Subject:"
msgstr ""
msgstr "Тема:"
#. module: l10n_ch
#: model:res.partner.title,name:l10n_ch.res_c_partner_title_societe
@ -345,7 +345,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Quantity"
msgstr ""
msgstr "Количество"
#. module: l10n_ch
#: field:res.partner.bank,dta_code:0
@ -365,7 +365,7 @@ msgstr ""
#. module: l10n_ch
#: field:account.journal.todo,default_debit_account_id:0
msgid "Default Debit Account"
msgstr ""
msgstr "Дебетовый счет по умолчанию"
#. module: l10n_ch
#: help:account.journal.todo,default_credit_account_id:0
@ -395,13 +395,13 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Invoice"
msgstr ""
msgstr "Счет"
#. module: l10n_ch
#: view:account.journal.todo:0
#: wizard_button:l10n_ch.bvr_import,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: l10n_ch
#: model:res.partner.bank.type.field,name:l10n_ch.post_field_bvpost
@ -419,32 +419,32 @@ msgstr ""
#. module: l10n_ch
#: field:account.journal.todo,default_credit_account_id:0
msgid "Default Credit Account"
msgstr ""
msgstr "Счет по кредиту по умолчанию"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Unit Price"
msgstr ""
msgstr "Цена за ед."
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "(incl. taxes):"
msgstr ""
msgstr "(в т.ч. налоги)"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Taxes:"
msgstr ""
msgstr "Налоги:"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Description"
msgstr ""
msgstr "Описание"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Price"
msgstr ""
msgstr "Цена"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
@ -475,7 +475,7 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Total (excl. taxes):"
msgstr ""
msgstr "Всего (до налогов)"
#. module: l10n_ch
#: help:res.company,bvr_delta_vert:0
@ -524,9 +524,9 @@ msgstr ""
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Supplier Refund"
msgstr ""
msgstr "Возврат средств от поставщика"
#. module: l10n_ch
#: rml:l10n_ch.invoice.bvr:0
msgid "Total"
msgstr ""
msgstr "Итого"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-04-10 14:25+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:56+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:19+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_ch_chart_c2c_pcg
@ -49,7 +49,7 @@ msgstr ""
#. module: l10n_ch_chart_c2c_pcg
#: view:account.tax.template.todo:0
msgid "Next"
msgstr ""
msgstr "Далее"
#. module: l10n_ch_chart_c2c_pcg
#: field:account.tax.template.todo,name:0
@ -59,7 +59,7 @@ msgstr ""
#. module: l10n_ch_chart_c2c_pcg
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: l10n_ch_chart_c2c_pcg
#: model:account.account.type,name:l10n_ch_chart_c2c_pcg.account_type_financial_asset
@ -208,7 +208,7 @@ msgstr ""
#. module: l10n_ch_chart_c2c_pcg
#: field:account.tax.template.todo,account_collected_id:0
msgid "Invoice Tax Account"
msgstr ""
msgstr "Счет налога по счету"
#. module: l10n_ch_chart_c2c_pcg
#: model:account.account.type,name:l10n_ch_chart_c2c_pcg.account_type_depreciation
@ -260,7 +260,7 @@ msgstr ""
#. module: l10n_ch_chart_c2c_pcg
#: view:account.tax.template.todo:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: l10n_ch_chart_c2c_pcg
#: model:account.account.type,name:l10n_ch_chart_c2c_pcg.account_type_inventory

88
addons/l10n_in/i18n/ru.po Normal file
View File

@ -0,0 +1,88 @@
# Russian translation for openobject-addons
# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2009-11-25 15:28+0000\n"
"PO-Revision-Date: 2010-07-11 09:56+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_chart_in
#: model:ir.module.module,description:l10n_chart_in.module_meta_information
msgid ""
"\n"
" Indian Accounting : chart of Account\n"
" "
msgstr ""
#. module: l10n_chart_in
#: constraint:account.account.template:0
msgid "Error ! You can not create recursive account templates."
msgstr ""
#. module: l10n_chart_in
#: model:account.journal,name:l10n_chart_in.opening_journal
msgid "Opening Journal"
msgstr ""
#. module: l10n_chart_in
#: model:ir.actions.todo,note:l10n_chart_in.config_call_account_template_in_minimal
msgid ""
"Generate Chart of Accounts from a Chart Template. You will be asked to pass "
"the name of the company, the chart template to follow, the no. of digits to "
"generate the code for your accounts and Bank account, currency to create "
"Journals. Thus,the pure copy of chart Template is generated.\n"
"\tThis is the same wizard that runs from Financial "
"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
"Chart of Accounts from a Chart Template."
msgstr ""
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_liability1
msgid "Liability"
msgstr "Обязательства"
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_asset1
msgid "Asset"
msgstr "Оборудование"
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_closed1
msgid "Closed"
msgstr "Закрытый"
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_income1
msgid "Income"
msgstr "Доход"
#. module: l10n_chart_in
#: constraint:account.tax.code.template:0
msgid "Error ! You can not create recursive Tax Codes."
msgstr ""
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_expense1
msgid "Expense"
msgstr "Расход"
#. module: l10n_chart_in
#: model:ir.module.module,shortdesc:l10n_chart_in.module_meta_information
msgid "Indian Chart of Account"
msgstr ""
#. module: l10n_chart_in
#: model:account.account.type,name:l10n_chart_in.account_type_root_ind1
msgid "View"
msgstr "Просмотр"

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-04-10 09:32+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:57+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:16+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_lu
@ -34,7 +34,7 @@ msgstr ""
#. module: l10n_lu
#: wizard_field:l10n_lu.tax.report.wizard,init,tax_code_id:0
msgid "Company"
msgstr ""
msgstr "Компания"
#. module: l10n_lu
#: model:account.account.type,name:l10n_lu.account_type_income
@ -66,12 +66,12 @@ msgstr ""
#. module: l10n_lu
#: model:account.account.type,name:l10n_lu.account_type_liability
msgid "Liability"
msgstr ""
msgstr "Обязательства"
#. module: l10n_lu
#: model:ir.ui.menu,name:l10n_lu.legal_lu
msgid "Luxembourg"
msgstr ""
msgstr "Люксембург"
#. module: l10n_lu
#: model:ir.actions.wizard,name:l10n_lu.wizard_print_vat
@ -82,7 +82,7 @@ msgstr "Декларация НДС"
#. module: l10n_lu
#: wizard_field:l10n_lu.tax.report.wizard,init,period_id:0
msgid "Period"
msgstr ""
msgstr "Период"
#. module: l10n_lu
#: model:account.account.type,name:l10n_lu.account_type_asset
@ -97,7 +97,7 @@ msgstr "Собственные средства"
#. module: l10n_lu
#: wizard_button:l10n_lu.tax.report.wizard,init,end:0
msgid "Cancel"
msgstr ""
msgstr "Отмена"
#. module: l10n_lu
#: constraint:account.tax.code.template:0

View File

@ -140,7 +140,13 @@ class membership_line(osv.osv):
'''Member line'''
def _check_membership_date(self, cr, uid, ids, context=None):
'''Check if membership product is not in the past'''
"""Check if membership product is not in the past
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Membership Line IDs
@param context: A standard dictionary for contextual values
"""
cr.execute('''
SELECT MIN(ml.date_to - ai.date_invoice)
@ -158,7 +164,15 @@ class membership_line(osv.osv):
return True
def _state(self, cr, uid, ids, name, args, context=None):
'''Compute the state lines'''
"""Compute the state lines
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Membership Line IDs
@param name: Field Name
@param context: A standard dictionary for contextual values
@param return: Dictionary of state Value
"""
res = {}
for line in self.browse(cr, uid, ids):
cr.execute('''
@ -221,35 +235,47 @@ class Partner(osv.osv):
_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)
member_line_obj = self.pool.get('membership.membership_line')
res_obj = self.pool.get('res.partner')
data_inv = member_line_obj.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)
ids2 = res_obj.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):
data_inv = self.pool.get('account.invoice').browse(cr, uid, ids, context)
inv_obj = self.pool.get('account.invoice')
res_obj = self.pool.get('res.partner')
data_inv = inv_obj.browse(cr, uid, ids, context)
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)
ids2 = res_obj.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):
"""This Function return Membership State For Given Partner.
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current users ID for security checks,
@param ids: List of Partner IDs
@param name: Field Name
@param context: A standard dictionary for contextual values
@param return: Dictionary of Membership state Value
"""
res = {}
for id in ids:
res[id] = 'none'
today = time.strftime('%Y-%m-%d')
for id in ids:
partner_data = self.browse(cr,uid,id)
partner_data = self.browse(cr, uid, id)
if partner_data.membership_cancel and today > partner_data.membership_cancel:
res[id] = 'canceled'
continue
@ -302,7 +328,7 @@ class Partner(osv.osv):
def _membership_date(self, cr, uid, ids, name, args, context=None):
'''Return date of membership'''
"""Return date of membership"""
name = name[0]
res = {}
@ -404,6 +430,8 @@ class Partner(osv.osv):
}
def _check_recursion(self, cr, uid, ids):
"""Check Recursive for Associated Members.
"""
level = 100
while len(ids):
cr.execute('select distinct associate_member from res_partner where id IN %s',(tuple(ids),))
@ -438,9 +466,11 @@ product_template()
class Product(osv.osv):
def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
model_obj = self.pool.get('ir.model.data')
if ('product' in context) and (context['product']=='membership_product'):
model_data_ids_form = self.pool.get('ir.model.data').search(cr,user,[('model','=','ir.ui.view'),('name','in',['membership_products_form','membership_products_tree'])])
resource_id_form = self.pool.get('ir.model.data').read(cr, user, model_data_ids_form, fields=['res_id','name'])
model_data_ids_form = model_obj.search(cr,user,[('model','=','ir.ui.view'),('name','in',['membership_products_form','membership_products_tree'])])
resource_id_form = model_obj.read(cr, user, model_data_ids_form, fields=['res_id','name'])
dict_model={}
for i in resource_id_form:
dict_model[i['name']]=i['res_id']
@ -488,6 +518,8 @@ class account_invoice_line(osv.osv):
_inherit='account.invoice.line'
def write(self, cr, uid, ids, vals, context=None):
"""Overrides orm write method
"""
if not context:
context={}
res = super(account_invoice_line, self).write(cr, uid, ids, vals, context=context)
@ -513,6 +545,8 @@ class account_invoice_line(osv.osv):
return res
def unlink(self, cr, uid, ids, context=None):
"""Remove Membership Line Record for Account Invoice Line
"""
if not context:
context={}
member_line_obj = self.pool.get('membership.membership_line')
@ -522,10 +556,13 @@ class account_invoice_line(osv.osv):
return super(account_invoice_line, self).unlink(cr, uid, ids, context=context)
def create(self, cr, uid, vals, context={}):
"""Overrides orm create method
"""
result = super(account_invoice_line, self).create(cr, uid, vals, context)
line = self.browse(cr, uid, result)
member_line_obj = self.pool.get('membership.membership_line')
if line.invoice_id.type == 'out_invoice':
member_line_obj = self.pool.get('membership.membership_line')
ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
if line.product_id and line.product_id.membership and not ml_ids:
# Product line is a membership product

View File

@ -138,7 +138,7 @@
<field name="arch" type="xml">
<field name="membership_start" position="after">
<newline/>
<group expand="1" string="Group By" colspan="10" col="8">
<group expand="0" string="Group By" colspan="10" col="8">
<filter string="Associate Member" name = "associate" icon="terp-personal" domain="[]" context="{'group_by':'associate_member'}"/>
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'membership_state'}"/>
<separator orientation="vertical"/>
@ -169,7 +169,7 @@
<field name="view_mode">form</field>
<field name="act_window_id" ref="action_membership_members"/>
</record>
<menuitem name="Members" parent="menu_member" id="menu_members" sequence="2" action="action_membership_members"/>
<!-- PARTNERS -->

View File

@ -46,21 +46,9 @@
-
!record {model: membership.invoice, id: membership_invoice_0}:
product_id: membership.product_product_membershipproduct0
- |
I check that address is defined or not for this Member.
-
!python {model: membership.invoice}: |
partner_ids = [ref('res_partner_markjohnson0')]
addre_obj = self.pool.get('res.partner.address')
ids = addre_obj.search(cr, uid, [('partner_id', '=', partner_ids)])
addre_id = addre_obj.browse(cr, uid, ids)[0]
assert addre_id.partner_id
assert addre_id.id
assert addre_id.type
- |
I click on "Confirm" button of this wizard.
I click on "Confirm" button of this wizard. and also check that address is defined or not for this partner in this function.
-
!python {model: membership.invoice}: |
self.membership_invoice(cr, uid, [ref("membership_invoice_0")], {"active_ids": [ref("membership.res_partner_markjohnson0")]})
@ -69,21 +57,20 @@
I check that Invoice is created for this members.
-
!python {model: res.partner}: |
from tools.translate import _
invoice_obj = self.pool.get('account.invoice')
partner_obj = self.pool.get('res.partner')
product_obj = self.pool.get('product.product')
invoice_line_obj = self.pool.get(('account.invoice.line'))
invoice_line_obj = self.pool.get('account.invoice.line')
partner_id = self.browse(cr, uid, [ref('res_partner_markjohnson0')])[0]
ids = invoice_obj.search(cr, uid, [('partner_id', '=', partner_id.id), ('account_id', '=', partner_id.property_account_receivable.id)])
invoice_id = invoice_obj.browse(cr, uid, ids)[0]
product = product_obj.browse(cr, uid, [ref('product_product_membershipproduct0')], context=context)[0]
partner_id = self.browse(cr, uid, ref('res_partner_markjohnson0'))
inv_ids = invoice_obj.search(cr, uid, [('partner_id', '=', partner_id.id), ('account_id', '=', partner_id.property_account_receivable.id)])
invoice_id = invoice_obj.browse(cr, uid, inv_ids)[0]
product = product_obj.browse(cr, uid, ref('product_product_membershipproduct0'), context=context)
line_ids = invoice_line_obj.search(cr, uid, [('product_id', '=', product.id), ('invoice_id', '=', invoice_id.id)])
line_id = invoice_line_obj.browse(cr, uid, line_ids)[0]
assert line_id.product_id.id == product.id
assert invoice_id.partner_id.id == partner_id.id
assert line_ids, _('Invoices has not been generated for this Member!')
- |
I check that the "Current membership state" will remain same untill opening the invoice.
@ -96,17 +83,17 @@
So, I check that invoice is in draft state then the "membership state" of a member is "Waiting member".
-
!python {model: membership.membership_line}: |
partner_id = self.pool.get('res.partner').browse(cr, uid, [ref('res_partner_markjohnson0')])[0]
ids = self.search(cr, uid, [('partner', '=', partner_id.id)])
current_id = self.browse(cr, uid, ids)[0]
partner_obj = self.pool.get('res.partner')
partner_obj = self.pool.get('res.partner')
inv_obj = self.pool.get('account.invoice')
ids = inv_obj.search(cr, uid, [('partner_id', '=', partner_id.id), ('account_id', '=', partner_id.property_account_receivable.id)])
inv_id = inv_obj.browse(cr, uid, ids)[0]
partner_id = partner_obj.browse(cr, uid, ref('res_partner_markjohnson0'))
member_ids = self.search(cr, uid, [('partner', '=', partner_id.id)])
current_id = self.browse(cr, uid, member_ids)[0]
inv_ids = inv_obj.search(cr, uid, [('partner_id', '=', partner_id.id), ('account_id', '=', partner_id.property_account_receivable.id)])
inv_id = inv_obj.browse(cr, uid, inv_ids)[0]
if inv_id.state == 'draft':
assert current_id == 'waiting'
assert current_id.state == 'waiting'
- |
When the invoice is in open state it become Invoiced Member, When the invoice is in paid state the same "Current membership state" changed to Paid Member.
Now, If we cancel the invoice "Current membership state" changed to Cancel Member.

View File

@ -25,56 +25,48 @@ from tools.translate import _
import tools
class membership_invoice(osv.osv_memory):
"""Membership Invoice"""
_name = "membership.invoice"
_description = "Membership Invoice From Partner"
_columns ={
_description = "Membership Invoice"
_columns = {
'product_id': fields.many2one('product.product','Membership Product', required=True),
}
}
def membership_invoice(self, cr, uid, ids, context={}):
def membership_invoice(self, cr, uid, ids, context=None):
invoice_obj = self.pool.get('account.invoice')
partner_obj = self.pool.get('res.partner')
product_obj = self.pool.get('product.product')
invoice_line_obj = self.pool.get(('account.invoice.line'))
invoice_tax_obj = self.pool.get(('account.invoice.tax'))
partner_ids = context['active_ids']
for data in self.read(cr, uid, ids, context=context):
product_id = data['product_id']
cr.execute('''
SELECT partner_id, id, type
FROM res_partner_address
WHERE partner_id IN %s''',(tuple(partner_ids),))
fetchal = cr.fetchall()
if not fetchal:
raise osv.except_osv(_('Error !'), _('No Address defined for this partner'))
partner_address_ids = {}
for x in range(len(fetchal)):
pid = fetchal[x][0]
id = fetchal[x][1]
type = fetchal[x][2]
if partner_address_ids.has_key(pid) and partner_address_ids[pid]['type'] == 'invoice':
continue
partner_address_ids[pid] = {'id': id, 'type': type}
invoice_list= []
product = product_obj.read(cr, uid, product_id, ['uom_id'], context=context)
for partner_id in partner_ids:
account_id = partner_obj.read(cr, uid, partner_id, ['property_account_receivable'], context=context)['property_account_receivable'][0]
read_fpos = partner_obj.read(cr, uid, partner_id, ['property_account_position'], context=context)
fpos_id = read_fpos['property_account_position'] and read_fpos['property_account_position'][0]
invoice_line_obj = self.pool.get('account.invoice.line')
invoice_tax_obj = self.pool.get('account.invoice.tax')
if not context:
context={}
partner_ids = context.get('active_ids', [])
invoice_list = []
for partner in partner_obj.browse(cr, uid, partner_ids, context=context):
account_id = partner.property_account_receivable and partner.property_account_receivable.id or False
fpos_id = partner.property_account_position and partner.property_account_position.id or False
addr = partner_obj.address_get(cr, uid, [partner.id], ['invoice'])
if not addr.get('invoice', False):
continue
for data in self.browse(cr, uid, ids, context=context):
product_id = data.product_id and data.product_id.id or False
product_uom_id = data.product_id and data.product_id.uom_id.id
quantity = 1
line_value = {
'product_id' : product_id,
}
quantity = 1
line_dict = invoice_line_obj.product_id_change(cr, uid, {}, product_id, product['uom_id'][0], quantity, '', 'out_invoice', partner_id, fpos_id, context=context)
}
line_dict = invoice_line_obj.product_id_change(cr, uid, {},
product_id, product_uom_id, quantity, '', 'out_invoice', partner.id, fpos_id, context=context)
line_value.update(line_dict['value'])
if line_value['invoice_line_tax_id']:
if line_value.get('invoice_line_tax_id', False):
tax_tab = [(6, 0, line_value['invoice_line_tax_id'])]
line_value['invoice_line_tax_id'] = tax_tab
invoice_id = invoice_obj.create(cr, uid, {
'partner_id' : partner_id,
'address_invoice_id': partner_address_ids[partner_id]['id'],
'partner_id' : partner.id,
'address_invoice_id': addr.get('invoice', False),
'account_id': account_id,
'fiscal_position': fpos_id or False
}
@ -86,16 +78,17 @@ class membership_invoice(osv.osv_memory):
if line_value['invoice_line_tax_id']:
tax_value = invoice_tax_obj.compute(cr, uid, invoice_id).values()
for tax in tax_value:
invoice_tax_obj.create(cr, uid, tax, context=context)
invoice_tax_obj.create(cr, uid, tax, context=context)
return {
'domain': [('id', 'in', invoice_list)],
'name': 'Membership Invoice',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'account.invoice',
'type': 'ir.actions.act_window',
}
return {
'domain': [('id', 'in', invoice_list)],
'name': 'Membership Invoice',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'account.invoice',
'type': 'ir.actions.act_window',
}
membership_invoice()

View File

@ -9,11 +9,11 @@
<field name="arch" type="xml">
<form string="Membership Invoice">
<group colspan="4" >
<field name="product_id" context="{'product':membership_product}" domain="[('membership','=',True)]"/>
<field name="product_id" context="{'product':membership_product}" domain="[('membership','=',True)]" widget="selection"/>
</group>
<group colspan="4" col="6">
<button icon="gtk-close" special="cancel" string="Close"/>
<button icon="gtk-ok" string="Confirm" name="membership_invoice" type="object"/>
<button icon="gtk-apply" string="Confirm" name="membership_invoice" type="object"/>
</group>
</form>
</field>
@ -39,4 +39,4 @@
</record>
</data>
</openerp>
</openerp>

View File

@ -69,6 +69,7 @@
'wizard/change_production_qty_view.xml',
'wizard/mrp_price_view.xml',
'wizard/mrp_workcenter_load_view.xml',
'wizard/mrp_change_standard_price_view.xml',
# 'wizard/mrp_track_prod_view.xml',
'mrp_view.xml',
'mrp_wizard.xml',

View File

@ -63,11 +63,12 @@ class product_product(osv.osv):
"""
res = super(product_product, self).do_change_standard_price(cr, uid, ids, datas, context=context)
bom_obj = self.pool.get('mrp.bom')
change = context.get('change_parent_price', False)
def _compute_price(bom):
price = 0.0
if bom.bom_id :
if bom.bom_id.bom_lines :
for bom_line in bom.bom_id.bom_lines :
if bom.bom_id and change:
if bom.bom_id.bom_lines:
for bom_line in bom.bom_id.bom_lines:
prod_price = self.read(cr, uid, bom_line.product_id.id, ['standard_price'])['standard_price']
price += bom_line.product_qty * prod_price

View File

@ -265,10 +265,10 @@
<para style="terp_default_Centre_8">[[ formatLang(o.date_planned, date_time = True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.sale_ref or removeParentNode('para')]]</para>
<para style="terp_default_Centre_8">[[ 'sale_ref' in o._columns.keys() and o.sale_ref or removeParentNode('para') ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.sale_name or removeParentNode('para') ]]</para>
<para style="terp_default_Centre_8">[[ 'sale_name' in o._columns.keys() and o.sale_name or removeParentNode('para') ]]</para>
</td>
</tr>
</blockTable>

View File

@ -24,6 +24,7 @@ import mrp_price
import mrp_workcenter_load
#import mrp_track_prod
import change_production_qty
import mrp_change_standard_price
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields, osv
class change_standard_price(osv.osv_memory):
_inherit = "stock.change.standard.price"
_description = "Change Standard Price"
_columns = {
'change_parent_price': fields.boolean('Change Parent Price'),
}
def change_price(self, cr, uid, ids, context):
""" Changes the Standard Price of Parent Product according to BoM
only when the field 'change_parent_price' is True.
And creates an account move accordingly.
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@param ids: List of IDs selected
@param context: A standard dictionary
@return:
"""
res = self.browse(cr, uid, ids)
context.update({'change_parent_price': res[0].change_parent_price})
return super(change_standard_price, self).change_price(cr, uid, ids, context=context)
change_standard_price()

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_change_standard_price_inherit" model="ir.ui.view">
<field name="name">Change Standard Price (Inherit)</field>
<field name="model">stock.change.standard.price</field>
<field name="inherit_id" ref="stock.view_change_standard_price"/>
<field name="type">form</field>
<field name="arch" type="xml">
<field name="new_price" position="after">
<field name="change_parent_price"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -224,6 +224,8 @@ class mrp_production(osv.osv):
obj = self.browse(cr, uid, ids)[0]
for workcenter_line in obj.workcenter_lines:
tmp = self.pool.get('mrp.production.workcenter.line').action_done(cr, uid, [workcenter_line.id])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_done', cr)
return super(mrp_production,self).action_production_end(cr, uid, ids)
def action_in_production(self, cr, uid, ids):
@ -234,6 +236,8 @@ class mrp_production(osv.osv):
workcenter_line_obj = self.pool.get('mrp.production.workcenter.line')
for workcenter_line in obj.workcenter_lines:
workcenter_line_obj.action_start_working(cr, uid, [workcenter_line.id])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_start_working', cr)
return super(mrp_production,self).action_in_production(cr, uid, ids)
def action_cancel(self, cr, uid, ids):
@ -243,6 +247,8 @@ class mrp_production(osv.osv):
obj = self.browse(cr, uid, ids)[0]
for workcenter_line in obj.workcenter_lines:
tmp = self.pool.get('mrp.production.workcenter.line').action_cancel(cr, uid, [workcenter_line.id])
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'mrp.production.workcenter.line', workcenter_line.id, 'button_cancel', cr)
return super(mrp_production,self).action_cancel(cr,uid,ids)
def _compute_planned_workcenter(self, cr, uid, ids, context={}, mini=False):

View File

@ -4,6 +4,41 @@
<menuitem id="menu_mrp_planning" name="Planning"
parent="base.menu_mrp_root" sequence="2"
groups="base.group_extended"/>
<record id="mrp_production_form_inherit_view" model="ir.ui.view">
<field name="name">mrp.production.form.inherit</field>
<field name="model">mrp.production</field>
<field name="type">form</field>
<field name="inherit_id" ref="mrp.mrp_production_form_view"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='workcenter_lines']/form/field[@name='hour']" position="after">
<group colspan="8" col="8">
<field name="state"/>
<button name="button_draft" string="Set Draft" states="cancel" icon="gtk-convert"/>
<button name="button_start_working" string="Start" states="draft" icon="gtk-go-forward"/>
<button name="button_resume" string="Resume" states="pause" icon="gtk-media-pause"/>
<button name="button_cancel" string="Cancel" states="draft,startworking" icon="gtk-cancel"/>
<button name="button_pause" string="Pause" states="startworking" icon="gtk-media-pause"/>
<button name="button_done" string="Finished" states="startworking" icon="gtk-ok"/>
</group>
</xpath>
</field>
</record>
<record id="mrp_production_form_inherit_view2" model="ir.ui.view">
<field name="name">mrp.production.form.inherit2</field>
<field name="model">mrp.production</field>
<field name="type">form</field>
<field name="inherit_id" ref="mrp.mrp_production_form_view"/>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='workcenter_lines']/tree/field[@name='hour']" position="after">
<field name="state"/>
<button name="button_start_working" string="Start working" states="draft,pause" icon="gtk-go-forward"/>
<button name="button_done" string="Finished" states="startworking" icon="gtk-jump-to"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="mrp_production_workcenter_tree_view_inherit">
<field name="name">mrp.production.workcenter.line.tree</field>
<field name="model">mrp.production.workcenter.line</field>
@ -150,7 +185,7 @@
</record>
<!-- Action for tree view of workcenter line -->
<!-- Action for All Operations -->
<record model="ir.actions.act_window" id="mrp_production_wc_action_form">
<field name="name">Work Orders</field>
@ -158,21 +193,9 @@
<field name="res_model">mrp.production.workcenter.line</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,gantt,calendar,graph</field>
<field name="domain">[('id','=',active_id)]</field>
<field name="search_view_id" ref="view_mrp_production_workcenter_form_view_filter"/>
</record>
<!-- Action for All Operations -->
<record model="ir.actions.act_window" id="mrp_production_wc_action">
<field name="name">All Work Orders</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.production.workcenter.line</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,graph,calendar,gantt</field>
</record>
<record model="ir.actions.act_window" id="mrp_production_wc_action_planning">
<field name="name">Work Orders Planning</field>
<field name="type">ir.actions.act_window</field>

View File

@ -42,9 +42,9 @@ class pos_config_journal(osv.osv):
pos_config_journal()
class pos_company_discount(osv.osv):
""" Company Discount and Cashboxes """
""" Company Discount and Cashboxes """
_inherit = 'res.company'
_columns = {
'company_discount': fields.float('Max Discount(%)', digits_compute= dp.get_precision('Point Of Sale')),
@ -55,10 +55,10 @@ pos_company_discount()
class pos_order(osv.osv):
""" Point of sale gives business owners a convenient way of checking out customers
and of recording sales """
and of recording sales """
_name = "pos.order"
_description = "Point of Sale"
_order = "date_order, create_date desc"
@ -66,7 +66,7 @@ class pos_order(osv.osv):
def unlink(self, cr, uid, ids, context={}):
for rec in self.browse(cr, uid, ids, context=context):
for rec_statement in rec.statement_ids:
if (rec_statement.statement_id and rec_statement.statement_id.state=='confirm') or rec.state=='done':
@ -76,7 +76,7 @@ class pos_order(osv.osv):
def onchange_partner_pricelist(self, cr, uid, ids, part, context={}):
""" Changed price list on_change of partner_id"""
if not part:
return {}
pricelist = self.pool.get('res.partner').browse(cr, uid, part).property_product_pricelist.id
@ -108,13 +108,13 @@ class pos_order(osv.osv):
return res
def _get_date_payment2(self, cr, uid, ids, context, *a):
# Todo need to check this function
# Todo need to check this function
""" Find payment Date
@param field_names: Names of fields.
@return: Dictionary of values """
res = {}
pay_obj = self.pool.get('account.bank.statement')
stat_obj_line = self.pool.get('account.bank.statement.line')
@ -137,12 +137,12 @@ class pos_order(osv.osv):
if val:
res[order.id]=val
return res
def _get_date_payment(self, cr, uid, ids, context, *a):
""" Find Validation Date
@return: Dictionary of values """
@return: Dictionary of values """
res = {}
pay_obj = self.pool.get('pos.payment')
tot =0.0
@ -172,22 +172,22 @@ class pos_order(osv.osv):
return res
def _amount_all(self, cr, uid, ids, name, args, context=None):
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
res={}
for order in self.browse(cr, uid, ids):
res[order.id] = {
'amount_paid': 0.0,
'amount_return':0.0,
'amount_tax':0.0,
}
val=0.0
cur_obj = self.pool.get('res.currency')
cur = order.pricelist_id.currency_id
}
val=0.0
cur_obj = self.pool.get('res.currency')
cur = order.pricelist_id.currency_id
for payment in order.statement_ids:
res[order.id]['amount_paid'] += payment.amount
res[order.id]['amount_paid'] += payment.amount
for payment in order.payments:
res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0)
res[order.id]['amount_return'] += (payment.amount < 0 and payment.amount or 0)
for line in order.lines:
if order.price_type!='tax_excluded':
res[order.id]['amount_tax'] = reduce(lambda x, y: x+round(y['amount'], 2),
@ -197,16 +197,16 @@ class pos_order(osv.osv):
res[order.id]['amount_tax'])
elif line.qty != 0.0:
for c in tax_obj.compute_all(cr, uid, line.product_id.taxes_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.qty, line.product_id, line.order_id.partner_id)['taxes']:
val += c['amount']
val += c['amount']
res[order.id]['amount_tax'] = cur_obj.round(cr, uid, cur, val)
return res
def _sale_journal_get(self, cr, uid, context):
""" To get sale journal for this order"
@return: journal """
""" To get sale journal for this order"
@return: journal """
journal_obj = self.pool.get('account.journal')
res = journal_obj.search(cr, uid,
@ -217,10 +217,10 @@ class pos_order(osv.osv):
return False
def _shop_get(self, cr, uid, context):
""" To get Shop for this order"
@return: Shop id """
""" To get Shop for this order"
@return: Shop id """
company = self.pool.get('res.users').browse(cr, uid, uid, context).company_id
res = self.pool.get('sale.shop').search(cr, uid, [])
if res:
@ -228,7 +228,7 @@ class pos_order(osv.osv):
else:
return False
def copy(self, cr, uid, id, default=None, context={}):
if not default:
default = {}
default.update({
@ -245,7 +245,7 @@ class pos_order(osv.osv):
return super(pos_order, self).copy(cr, uid, id, default, context)
def _get_v( self, cr, uid, ids,*a):
""" Changed the Validation state of order
@return: State """
@ -326,11 +326,11 @@ class pos_order(osv.osv):
def _select_pricelist(self, cr, uid, context):
""" To get default pricelist for the order"
""" To get default pricelist for the order"
@param name: Names of fields.
@return: pricelist ID
"""
"""
pricelist = self.pool.get('product.pricelist').search(cr, uid, [('name', '=', 'Public Pricelist')])
if pricelist:
return pricelist[0]
@ -338,11 +338,11 @@ class pos_order(osv.osv):
return False
def _journal_default(self, cr, uid, context={}):
""" To get default pricelist for the order"
""" To get default pricelist for the order"
@param name: Names of fields.
@return: journal ID
"""
"""
journal_list = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')])
if journal_list:
return journal_list[0]
@ -350,7 +350,7 @@ class pos_order(osv.osv):
return False
_defaults = {
'user_salesman_id':lambda self, cr, uid, context: uid,
'user_salesman_id':lambda self, cr, uid, context: uid,
'user_id': lambda self, cr, uid, context: uid,
'sale_manager': lambda self, cr, uid, context: uid,
'state': lambda *a: 'draft',
@ -369,11 +369,11 @@ class pos_order(osv.osv):
def test_order_lines(self, cr, uid, order, context={}):
""" Test order line is created or not for the order "
""" Test order line is created or not for the order "
@param name: Names of fields.
@return: True
"""
"""
if not order.lines:
raise osv.except_osv(_('Error'), _('No order lines defined for this sale.'))
@ -385,10 +385,10 @@ class pos_order(osv.osv):
return True
def test_paid(self, cr, uid, ids, context=None):
""" Test all amount is paid for this order
""" Test all amount is paid for this order
@return: True
"""
"""
for order in self.browse(cr, uid, ids, context):
if order.lines and not order.amount_total:
return True
@ -398,9 +398,9 @@ class pos_order(osv.osv):
return True
def _get_qty_differences(self, orders, old_picking):
"""check if the customer changed the product quantity """
order_dict = {}
for order in orders:
for line in order.lines:
@ -422,9 +422,9 @@ class pos_order(osv.osv):
return diff_dict
def _split_picking(self, cr, uid, ids, context, old_picking, diff_dict):
"""if the customer changes the product quantity, split the picking in two"""
# create a copy of the original picking and adjust the product qty:
picking_model = self.pool.get('stock.picking')
defaults = {
@ -462,9 +462,9 @@ class pos_order(osv.osv):
line.unlink(context=context)
def create_picking(self, cr, uid, ids, context={}):
"""Create a picking for each order and validate it."""
picking_obj = self.pool.get('stock.picking')
pick_name=self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')
orders = self.browse(cr, uid, ids, context)
@ -472,7 +472,7 @@ class pos_order(osv.osv):
if not order.picking_id:
new = True
picking_id = picking_obj.create(cr, uid, {
'name':pick_name,
'name':pick_name,
'origin': order.name,
'type': 'out',
'state': 'draft',
@ -530,8 +530,8 @@ class pos_order(osv.osv):
return True
def set_to_draft(self, cr, uid, ids, *args):
""" Changes order state to draft
""" Changes order state to draft
@return: True
"""
if not len(ids):
@ -545,10 +545,10 @@ class pos_order(osv.osv):
return True
def button_invalidate(self, cr, uid, ids, *args):
""" Check the access for the sale order
""" Check the access for the sale order
@return: True
"""
"""
res_obj = self.pool.get('res.company')
try:
part_company=res_obj.browse(cr,uid,uid) and res_obj.browse(cr,uid,uid).parent_id and res_obj.browse(cr,uid,uid).parent_id.id or None
@ -559,10 +559,10 @@ class pos_order(osv.osv):
return True
def button_validate(self, cr, uid, ids, *args):
""" Check the access for the sale order and update the date_validation
@return: True
"""
"""
res_obj = self.pool.get('res.company')
try:
part_company=res_obj.browse(cr,uid,uid) and res_obj.browse(cr,uid,uid).parent_id and res_obj.browse(cr,uid,uid).parent_id.id or None
@ -581,18 +581,18 @@ class pos_order(osv.osv):
def cancel_order(self, cr, uid, ids, context=None):
""" Changes order state to cancel
""" Changes order state to cancel
@return: True
"""
"""
self.write(cr, uid, ids, {'state': 'cancel'})
self.cancel_picking(cr, uid, ids, context={})
return True
def add_payment(self, cr, uid, order_id, data, context=None):
"""Create a new payment for the order"""
res_obj = self.pool.get('res.company')
statementl_obj = self.pool.get('account.bank.statement.line')
prod_obj = self.pool.get('product.product')
@ -645,9 +645,9 @@ class pos_order(osv.osv):
return statement_id
def add_product(self, cr, uid, order_id, product_id, qty, context=None):
"""Create a new order line the order"""
line_obj = self.pool.get('pos.order.line')
values = self.read(cr, uid, order_id, ['partner_id', 'pricelist_id'])
@ -669,9 +669,9 @@ class pos_order(osv.osv):
return order_line_id
def refund(self, cr, uid, ids, context={}):
"""Create a copy of order for refund order"""
"""Create a copy of order for refund order"""
clone_list = []
line_obj = self.pool.get('pos.order.line')
@ -696,7 +696,7 @@ class pos_order(osv.osv):
return clone_list
def action_invoice(self, cr, uid, ids, context={}):
"""Create a invoice of order """
res_obj = self.pool.get('res.company')
@ -739,7 +739,7 @@ class pos_order(osv.osv):
'quantity': line.qty,
}
inv_name = product_obj.name_get(cr, uid, [line.product_id.id], context=context)[0][1]
inv_line.update(inv_line_ref.product_id_change(cr, uid, [],
line.product_id.id,
line.product_id.uom_id.id,
@ -759,9 +759,9 @@ class pos_order(osv.osv):
return inv_ids
def create_account_move(self, cr, uid, ids, context=None):
"""Create a account move line of order """
"""Create a account move line of order """
account_move_obj = self.pool.get('account.move')
account_move_line_obj = self.pool.get('account.move.line')
account_period_obj = self.pool.get('account.period')
@ -777,7 +777,7 @@ class pos_order(osv.osv):
to_reconcile = []
group_tax = {}
account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context).id
order_account = order.partner_id and order.partner_id.property_account_receivable and order.partner_id.property_account_receivable.id or account_def or curr_c.account_receivable.id
# Create an entry for the sale
@ -845,7 +845,7 @@ class pos_order(osv.osv):
# Create a move for the line
account_move_line_obj.create(cr, uid, {
'name': "aa"+order.name,
'date': order.date_order,
'date': order.date_order[:10],
'ref': order.contract_number or order.name,
'quantity': line.qty,
'product_id':line.product_id.id,
@ -873,7 +873,7 @@ class pos_order(osv.osv):
account_move_line_obj.create(cr, uid, {
'name': "bb"+order.name,
'date': order.date_order,
'date': order.date_order[:10],
'ref': order.contract_number or order.name,
'product_id':line.product_id.id,
'quantity': line.qty,
@ -894,7 +894,7 @@ class pos_order(osv.osv):
for key, amount in group_tax.items():
account_move_line_obj.create(cr, uid, {
'name':"cc"+order.name,
'date': order.date_order,
'date': order.date_order[:10],
'ref': order.contract_number or order.name,
'move_id': move_id,
'company_id': comp_id,
@ -912,7 +912,7 @@ class pos_order(osv.osv):
# counterpart
to_reconcile.append(account_move_line_obj.create(cr, uid, {
'name': "dd"+order.name,
'date': order.date_order,
'date': order.date_order[:10],
'ref': order.contract_number or order.name,
'move_id': move_id,
'company_id': comp_id,
@ -963,7 +963,7 @@ class pos_order(osv.osv):
'statement_id': False,
'account_id':order_account
})
self.write(cr,uid,order.id,{'state':'done'})
return True
@ -1072,7 +1072,7 @@ class pos_order_line(osv.osv):
else:
res[line.id]=line.price_unit*line.qty
res[line.id] = res[line.id] + tax_amount
return res
def _amount_line(self, cr, uid, ids, field_name, arg, context):
res = {}
@ -1093,7 +1093,7 @@ class pos_order_line(osv.osv):
_('You have to select a pricelist in the sale form !\n' \
'Please set one before choosing a product.'))
p_obj = self.pool.get('product.product').browse(cr,uid,[product_id])[0]
uom_id=p_obj.uom_po_id.id
uom_id=p_obj.uom_po_id.id
price = self.pool.get('product.pricelist').price_get(cr, uid,
[pricelist], product_id, qty or 1.0, partner_id,{'uom': uom_id})[pricelist]
unit_price=price or p_obj.list_price
@ -1102,8 +1102,8 @@ class pos_order_line(osv.osv):
_("Couldn't find a pricelist line matching this product" \
" and quantity.\nYou have to change either the product," \
" the quantity or the pricelist."))
return unit_price
return unit_price
def onchange_product_id(self, cr, uid, ids, pricelist, product_id, qty=0, partner_id=False):
price = self.price_by_product(cr, uid, ids, pricelist, product_id, qty, partner_id)
self.write(cr,uid,ids,{'price_unit':price})
@ -1284,7 +1284,7 @@ class pos_payment(osv.osv):
pos_payment()
class account_move_line(osv.osv):
_inherit = 'account.move.line'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
@ -1304,9 +1304,9 @@ account_move_line()
class account_move(osv.osv):
_inherit = 'account.move'
def create(self, cr, user, vals, context={}):
pos_obj = self.pool.get('pos.order')
val_name = vals.get('name', '')

View File

@ -48,7 +48,6 @@ class pos_invoice(report_sxw.rml_parse):
raise osv.except_osv(_('Error !'), _('Please create an invoice for this sale.'))
iids.append(order.invoice_id)
nids.append(order.invoice_id.id)
self.cr.commit()
data['ids'] = nids
self.datas = data
self.ids = nids

View File

@ -70,7 +70,6 @@ class pos_open_statement(osv.osv_memory):
# })
period = statement_obj._get_period(cr, uid, context) or None
cr.execute("INSERT INTO account_bank_statement(journal_id,company_id,user_id,state,name, period_id,date) VALUES(%d,%d,%d,'open','%s',%d,'%s')"%(journal.id, company_id, uid, number, period, time.strftime('%Y-%m-%d %H:%M:%S')))
cr.commit()
cr.execute("select id from account_bank_statement where journal_id=%d and company_id=%d and user_id=%d and state='open' and name='%s'"%(journal.id, company_id, uid, number))
statement_id = cr.fetchone()[0]
if st_id:

View File

@ -128,11 +128,30 @@
</field>
</record>
<record id="view_process_filter" model="ir.ui.view">
<field name="name">process.process.filter</field>
<field name="model">process.process</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Process">
<group col="10" colspan="4">
<field name="name"/>
<field name="model_id"/>
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="4">
<filter string="Object" icon="terp-personal" domain="[]" context="{'group_by':'model_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_process_form">
<field name="name">Process</field>
<field name="res_model">process.process</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_process_filter" />
</record>
<menuitem
id="menu_process_form"
@ -239,11 +258,32 @@
</field>
</record>
<record id="view_process_node_filter" model="ir.ui.view">
<field name="name">process.node.filter</field>
<field name="model">process.node</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search ProcessNode">
<group col="10" colspan="4">
<field name="name"/>
<field name="model_id"/>
<field name="kind" />
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="4">
<filter string="Object" icon="terp-personal" domain="[]" context="{'group_by':'model_id'}"/>
<filter string="Kind Of Node" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'kind'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_process_node_form">
<field name="name">Process Nodes</field>
<field name="res_model">process.node</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_process_node_filter" />
</record>
<menuitem
@ -272,7 +312,7 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Process Transition">
<group string="Details">
<group>
<field name="name" select="1"/>
<newline/>
<field name="source_node_id" select="1"/>
@ -308,11 +348,32 @@
</field>
</record>
<record id="view_process_transition_filter" model="ir.ui.view">
<field name="name">process.transition.filter</field>
<field name="model">process.transition</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Process Transition">
<group col="10" colspan="4">
<field name="name"/>
<field name="source_node_id"/>
<field name="target_node_id" />
</group>
<newline/>
<group expand="0" string="Group By..." colspan="4" col="4">
<filter string="Source Node" icon="terp-personal" domain="[]" context="{'group_by':'source_node_id'}"/>
<filter string="Target Node" icon="terp-personal" domain="[]" context="{'group_by':'target_node_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_process_transition_form">
<field name="name">Process Transitions</field>
<field name="res_model">process.transition</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="view_process_transition_filter" />
</record>
<menuitem
id="menu_process_transition_form"

View File

@ -372,6 +372,9 @@ class procurement_order(osv.osv):
cr.execute('update procurement_order set message=%s where id=%s', (_('Not enough stock and no minimum orderpoint rule defined.'), procurement.id))
message = _('Procurement ') + " '" + procurement.name + "' "+ _("has an exception.") + _('Not enough stock and no minimum orderpoint rule defined.')
self.log(cr, uid, procurement.id, message)
if procurement.state=='exception' and procurement.message=='':
cr.execute('update procurement_order set message=%s where id=%s', (_('Not enough stock '), procurement.id))
return ok
def action_produce_assign_service(self, cr, uid, ids, context={}):

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 17:43+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 09:58+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:17+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product_margin
@ -24,7 +24,7 @@ msgstr ""
#. module: product_margin
#: wizard_field:product.margins,init,from_date:0
msgid "From"
msgstr ""
msgstr "От"
#. module: product_margin
#: help:product.product,sale_expected:0
@ -35,7 +35,7 @@ msgstr ""
#. module: product_margin
#: wizard_field:product.margins,init,to_date:0
msgid "To"
msgstr ""
msgstr "Кому"
#. module: product_margin
#: field:product.product,date_to:0
@ -84,7 +84,7 @@ msgstr ""
#: selection:product.margins,init,invoice_state:0
#: selection:product.product,invoice_state:0
msgid "Paid"
msgstr ""
msgstr "Оплачено"
#. module: product_margin
#: help:product.product,sales_gap:0
@ -99,7 +99,7 @@ msgstr ""
#. module: product_margin
#: view:product.product:0
msgid "Standard Price"
msgstr ""
msgstr "Стандартная цена"
#. module: product_margin
#: help:product.product,purchase_num_invoiced:0

View File

@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
"PO-Revision-Date: 2009-02-03 12:07+0000\n"
"Last-Translator: Fabien (Open ERP) <fp@tinyerp.com>\n"
"PO-Revision-Date: 2010-07-11 08:59+0000\n"
"Last-Translator: Pomazan Bogdan <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-06-22 04:14+0000\n"
"X-Launchpad-Export-Date: 2010-07-12 03:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: profile_manufacturing
@ -74,7 +74,7 @@ msgstr ""
#. module: profile_manufacturing
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
msgstr ""
msgstr "Недопустимое имя модели в определении действия."
#. module: profile_manufacturing
#: model:ir.actions.act_window,name:profile_manufacturing.action_config_install_module
@ -101,12 +101,12 @@ msgstr ""
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,board_document:0
msgid "Document Management"
msgstr ""
msgstr "Управление документами"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,portal:0
msgid "Portal"
msgstr ""
msgstr "Портал"
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
@ -169,7 +169,7 @@ msgstr ""
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,mrp_repair:0
msgid "Repair"
msgstr ""
msgstr "Восстановление"
#. module: profile_manufacturing
#: help:profile.manufacturing.config.install_modules_wizard,sale_margin:0
@ -193,12 +193,12 @@ msgstr ""
#. module: profile_manufacturing
#: view:profile.manufacturing.config.install_modules_wizard:0
msgid "Sales Management"
msgstr ""
msgstr "Управление продажами"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,warning:0
msgid "Warning"
msgstr ""
msgstr "Внимание"
#. module: profile_manufacturing
#: field:profile.manufacturing.config.install_modules_wizard,sale_margin:0

View File

@ -36,7 +36,7 @@
<field name="name" >Tasks According to User and Project</field>
<field name="model_id" ref="model_project_task"/>
<field name="global" eval="True"/>
<field name="domain_force">['|','|','|',('user_id','=',False),('user_id','=',user.id),('project_id.members','=',user.id),('project_id.user_id','=',user.id)]</field>
<field name="domain_force">['|','|','|',('user_id','=',False),('user_id','=',user.id),('project_id.members','in', [user.id]),('project_id.user_id','=',user.id)]</field>
</record>
</data>

View File

@ -30,7 +30,13 @@ class project_task(osv.osv):
'create_date': fields.datetime('Create Date'),
'attendee_ids': fields.many2many('calendar.attendee', \
'task_attendee_rel', 'task_id', 'attendee_id', 'Attendees'),
}
'state': fields.selection([('draft', 'Draft'),('open', 'In Progress'),('pending', 'Pending'), ('cancelled', 'Cancelled'), ('done', 'Done')], 'State', readonly=True, required=True,
help='If the task is created the state is \'Draft\'.\n If the task is started, the state becomes \'In Progress\'.\n If review is needed the task is in \'Pending\' state.\
\n If the task is over, the states is set to \'Done\'.'),
}
_defaults = {
'state': 'draft',
}
def import_cal(self, cr, uid, data, data_id=None, context=None):
todo_obj = self.pool.get('basic.calendar.todo')
@ -43,7 +49,7 @@ class project_task(osv.osv):
ids = []
for val in vals:
obj_tm = self.pool.get('res.users').browse(cr, uid, uid, context).company_id.project_time_mode_id
if not val.has_key('planned_hours'):
if not val.get('planned_hours', False):
# 'Computes duration' in days
plan = 0.0
if val.get('date') and val.get('date_deadline'):

View File

@ -3,7 +3,7 @@
<data noupdate="1">
<record model="basic.calendar" id="caldav.basic_calendar2">
<field name="name">Todo</field>
<field name="name">Tasks</field>
<field name="collection_id" ref="document.dir_calendars"></field>
<field name="type">vtodo</field>
</record>

Some files were not shown because too many files have changed in this diff Show More