From 3b56d0d65b6048ebb07a1de681c0a0593d5f6ec4 Mon Sep 17 00:00:00 2001 From: "atp (Open ERP)" Date: Thu, 29 Jul 2010 17:36:16 +0530 Subject: [PATCH] [IMP]: auction: usability Improvement in auction dates form ,add search view./ [IMP]: usability Improvement in objects form, and add search view. [IMP]: Remove some unnecessary wizard from objects form. [FIX]: Fix Image Path problem of catelog Flagey report. [FIX]: Fix _type_get() function argument problem for object category field. bzr revid: atp@tinyerp.co.in-20100729120616-4wohqg52atddh48b --- addons/auction/__openerp__.py | 10 +- addons/auction/auction.py | 745 +++++++++--------- addons/auction/auction_demo.xml | 82 +- addons/auction/auction_report.xml | 5 +- addons/auction/auction_view.xml | 387 ++++++--- addons/auction/report/ach_bordereau.xsl | 4 +- addons/auction/report/ach_bordereau_photo.xsl | 215 ++--- addons/auction/report/catalog2.py | 1 - addons/auction/report/catalog2.xsl | 93 ++- addons/auction/wizard/__init__.py | 6 +- .../wizard/auction_catalog_flagey_view.xml | 10 +- .../wizard/auction_lots_auction_move.py | 15 +- .../wizard/auction_lots_auction_move_view.xml | 14 +- .../auction/wizard/auction_lots_buyer_map.py | 36 +- .../wizard/auction_lots_buyer_map_view.xml | 1 + .../wizard/auction_lots_enable_view.xml | 8 +- .../auction_lots_make_invoice_buyer_view.xml | 5 +- .../wizard/auction_lots_sms_send_view.xml | 2 +- addons/auction/wizard/auction_pay_buy.py | 19 +- addons/auction/wizard/auction_payer_sel.py | 2 +- 20 files changed, 873 insertions(+), 787 deletions(-) diff --git a/addons/auction/__openerp__.py b/addons/auction/__openerp__.py index 7d96fe90aa1..29541b8b3fb 100644 --- a/addons/auction/__openerp__.py +++ b/addons/auction/__openerp__.py @@ -43,10 +43,8 @@ 'init_xml': ['auction_sequence.xml'], 'update_xml': [ 'security/ir.model.access.csv', -# 'wizard/auction_lots_cancel_view.xml', -# 'wizard/auction_transfer_unsold_object_view.xml', - 'wizard/auction_lots_able_view.xml', - 'wizard/auction_lots_enable_view.xml', + # 'wizard/auction_lots_able_view.xml', + # 'wizard/auction_lots_enable_view.xml', 'wizard/auction_lots_make_invoice_buyer_view.xml', 'wizard/auction_lots_make_invoice_view.xml', 'wizard/auction_taken_view.xml', @@ -55,11 +53,7 @@ 'wizard/auction_payer_sel_view.xml', 'wizard/auction_lots_sms_send_view.xml', 'wizard/auction_catalog_flagey_view.xml', -# 'wizard/auction_aie_send_view.xml', -# 'wizard/auction_aie_send_result_view.xml', 'wizard/auction_lots_buyer_map_view.xml', -# 'wizard/auction_lots_numerotate_view.xml', - 'auction_view.xml', 'auction_report.xml', 'auction_wizard.xml', diff --git a/addons/auction/auction.py b/addons/auction/auction.py index e55d999a1d1..c5572da6284 100644 --- a/addons/auction/auction.py +++ b/addons/auction/auction.py @@ -18,13 +18,15 @@ # along with this program. If not, see . # ############################################################################## - +import os import time import netsvc from osv import fields, osv, orm import ir from mx import DateTime from tools.translate import _ +import tools +from tools import config #---------------------------------------------------------- # Auction Artists @@ -32,10 +34,10 @@ from tools.translate import _ class auction_artists(osv.osv): _name = "auction.artists" _columns = { - 'name': fields.char('Artist/Author Name', size=64, required=True), - 'pseudo': fields.char('Pseudo', size=64), - 'birth_death_dates':fields.char('Birth / Death dates', size=64), - 'biography': fields.text('Biography'), + 'name': fields.char('Artist/Author Name', size=64, required=True), + 'pseudo': fields.char('Pseudo', size=64), + 'birth_death_dates':fields.char('Birth / Death dates', size=64), + 'biography': fields.text('Biography'), } auction_artists() @@ -43,41 +45,44 @@ auction_artists() # Auction Dates #---------------------------------------------------------- class auction_dates(osv.osv): + """Auction Dates""" _name = "auction.dates" - + _description=__doc__ + def _adjudication_get(self, cr, uid, ids, prop, unknow_none, unknow_dict): - tmp={} - for id in ids: - tmp[id]=0.0 - cr.execute("select sum(obj_price) from auction_lots where auction_id=%s", (id,)) - sum = cr.fetchone() - if sum: - tmp[id]=sum[0] - return tmp + res={} + total = 0.0 + lots_obj = self.pool.get('auction.lots') + for auction in self.browse(cr, uid, ids): + lots_ids = lots_obj.search(cr, uid, [('auction_id', '=', auction.id)]) + for lots in lots_obj.browse(cr, uid, lots_ids): + total+=lots.obj_price or 0.0 + res[auction.id]=total + return res def name_get(self, cr, uid, ids, context={}): if not len(ids): return [] reads = self.read(cr, uid, ids, ['name', 'auction1'], context) - name = [(r['id'],'['+r['auction1']+'] '+ r['name']) for r in reads] + name = [(r['id'], '['+r['auction1']+'] '+ r['name']) for r in reads] return name _columns = { - 'name': fields.char('Auction Name', size=64, required=True), - 'expo1': fields.date('First Exposition Day', required=True), - 'expo2': fields.date('Last Exposition Day', required=True), - 'auction1': fields.date('First Auction Day', required=True), - 'auction2': fields.date('Last Auction Day', required=True), - 'journal_id': fields.many2one('account.journal', 'Buyer Journal', required=True), - 'journal_seller_id': fields.many2one('account.journal', 'Seller Journal', required=True), - 'buyer_costs': fields.many2many('account.tax', 'auction_buyer_taxes_rel', 'auction_id', 'tax_id', 'Buyer Costs'), - 'seller_costs': fields.many2many('account.tax', 'auction_seller_taxes_rel', 'auction_id', 'tax_id', 'Seller Costs'), - 'acc_income': fields.many2one('account.account', 'Income Account', required=True), - 'acc_expense': fields.many2one('account.account', 'Expense Account', required=True), - 'adj_total': fields.function(_adjudication_get, method=True, string='Total Adjudication',store=True), - 'state': fields.selection((('draft','Draft'),('closed','Closed')),'State',select=1, readonly=True, - help='When auction starts the state is \'Draft\'.\n At the end of auction, the state becomes \'Closed\'.'), - 'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True), + 'name': fields.char('Auction Name', size=64, required=True), + 'expo1': fields.date('First Exposition Day', required=True), + 'expo2': fields.date('Last Exposition Day', required=True), + 'auction1': fields.date('First Auction Day', required=True), + 'auction2': fields.date('Last Auction Day', required=True), + 'journal_id': fields.many2one('account.journal', 'Buyer Journal', required=True), + 'journal_seller_id': fields.many2one('account.journal', 'Seller Journal', required=True), + 'buyer_costs': fields.many2many('account.tax', 'auction_buyer_taxes_rel', 'auction_id', 'tax_id', 'Buyer Costs'), + 'seller_costs': fields.many2many('account.tax', 'auction_seller_taxes_rel', 'auction_id', 'tax_id', 'Seller Costs'), + 'acc_income': fields.many2one('account.account', 'Income Account', required=True), + 'acc_expense': fields.many2one('account.account', 'Expense Account', required=True), + 'adj_total': fields.function(_adjudication_get, method=True, string='Total Adjudication', store=True), + 'state': fields.selection((('draft', 'Draft'), ('closed', 'Closed')), 'State', select=1, readonly=True, + help='When auction starts the state is \'Draft\'.\n At the end of auction, the state becomes \'Closed\'.'), + 'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account', required=True), } _defaults = { @@ -97,26 +102,15 @@ class auction_dates(osv.osv): # objects vendus mais non factures #TODO: convert this query to tiny API lots_obj = self.pool.get('auction.lots') - cr.execute('select count(*) as c from auction_lots where auction_id IN %s and state=%s and obj_price>0', (tuple(ids),'draft',)) - cr.execute('SELECT COUNT(*) AS c ' - 'FROM auction_lots ' - 'WHERE auction_id IN %s ' - 'AND state=%s AND obj_price>0', (tuple(ids), 'draft')) - nbr = cr.fetchone()[0] - ach_uids = {} - cr.execute('SELECT id FROM auction_lots ' - 'WHERE auction_id IN %s ' - 'AND state=%s AND obj_price>0', (tuple(ids), 'draft')) - r = lots_obj.lots_invoice(cr, uid, [x[0] for x in cr.fetchall()],{},None) - cr.execute('select id from auction_lots where auction_id IN %s and obj_price>0',(tuple(ids),)) - ids2 = [x[0] for x in cr.fetchall()] - # for auction in auction_ids: - c = lots_obj.seller_trans_create(cr, uid, ids2, {}) - self.write(cr, uid, ids, {'state':'closed'}) #close the auction + lots_ids = lots_obj.search(cr, uid, [('auction_id', 'in', ids), ('state', '=', 'draft'), ('obj_price', '>', 0)]) + new_buyer_invoice = lots_obj.lots_invoice(cr, uid, lots_ids, {}, None) + lots_ids2 = lots_obj.search(cr, uid, [('auction_id', 'in', ids), ('obj_price', '>', 0)]) + new_seller_invoice = lots_obj.seller_trans_create(cr, uid, lots_ids2, {}) + self.write(cr, uid, ids, {'state': 'closed'}) #close the auction return True + auction_dates() - #---------------------------------------------------------- # Deposits #---------------------------------------------------------- @@ -135,28 +129,30 @@ class auction_deposit(osv.osv): _description="Deposit Border" _order = "id desc" _columns = { - 'transfer' : fields.boolean('Transfer'), - 'name': fields.char('Depositer Inventory', size=64, required=True), - 'partner_id': fields.many2one('res.partner', 'Seller', required=True, change_default=True), - 'date_dep': fields.date('Deposit date', required=True), - 'method': fields.selection((('keep','Keep until sold'),('decease','Decrease limit of 10%'),('contact','Contact the Seller')), 'Withdrawned method', required=True), - 'tax_id': fields.many2one('account.tax', 'Expenses'), - 'create_uid': fields.many2one('res.users', 'Created by', readonly=True), - 'info': fields.char('Description', size=64), - 'lot_id': fields.one2many('auction.lots', 'bord_vnd_id', 'Objects'), - 'specific_cost_ids': fields.one2many('auction.deposit.cost', 'deposit_id', 'Specific Costs'), - 'total_neg': fields.boolean('Allow Negative Amount'), + 'transfer' : fields.boolean('Transfer'), + 'name': fields.char('Depositer Inventory', size=64, required=True), + 'partner_id': fields.many2one('res.partner', 'Seller', required=True, change_default=True), + 'date_dep': fields.date('Deposit date', required=True), + 'method': fields.selection((('keep', 'Keep until sold'), ('decease', 'Decrease limit of 10%'), ('contact', 'Contact the Seller')), 'Withdrawned method', required=True), + 'tax_id': fields.many2one('account.tax', 'Expenses'), + 'create_uid': fields.many2one('res.users', 'Created by', readonly=True), + 'info': fields.char('Description', size=64), + 'lot_id': fields.one2many('auction.lots', 'bord_vnd_id', 'Objects'), + 'specific_cost_ids': fields.one2many('auction.deposit.cost', 'deposit_id', 'Specific Costs'), + 'total_neg': fields.boolean('Allow Negative Amount'), } _defaults = { # 'date_dep': lambda *a: time.strftime('%Y-%m-%d'), - 'method': lambda *a: 'keep', - 'total_neg': lambda *a: False, - 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'auction.deposit'), + 'method': lambda *a: 'keep', + 'total_neg': lambda *a: False, + 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'auction.deposit'), } _constraints = [ ] + def partner_id_change(self, cr, uid, ids, part): return {} + auction_deposit() #---------------------------------------------------------- @@ -165,10 +161,10 @@ auction_deposit() class auction_deposit_cost(osv.osv): _name = 'auction.deposit.cost' _columns = { - 'name': fields.char('Cost Name', required=True, size=64), - 'amount': fields.float('Amount'), - 'account': fields.many2one('account.account', 'Destination Account', required=True), - 'deposit_id': fields.many2one('auction.deposit', 'Deposit'), + 'name': fields.char('Cost Name', required=True, size=64), + 'amount': fields.float('Amount'), + 'account': fields.many2one('account.account', 'Destination Account', required=True), + 'deposit_id': fields.many2one('auction.deposit', 'Deposit'), } auction_deposit_cost() @@ -178,60 +174,62 @@ auction_deposit_cost() class auction_lot_category(osv.osv): _name = 'auction.lot.category' _columns = { - 'name': fields.char('Category Name', required=True, size=64), - 'priority': fields.float('Priority'), - 'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the auction lot category without removing it."), - 'aie_categ' : fields.selection([('41',"Unclassifieds"), - ('2',"Antiques"), - ('42',"Antique/African Arts"), - ('59',"Antique/Argenterie"), - ('45',"Antique/Art from the Ivory Coast"), - ('46',"Antique/Art from the Ivory Coast/African Arts"), - ('12',"Antique/Books, manuscripts, eso."), - ('11',"Antique/Carpet and textilles"), - ('14',"Antique/Cartoons"), - ('26',"Antique/Clocks and watches"), - ('31',"Antique/Collectible & art objects"), - ('33',"Antique/Engravings"), - ('10',"Antique/Furnitures"), - ('50',"Antique/Graphic Arts"), - ('37',"Antique/Jewelry"), - ('9',"Antique/Lightings"), - ('52',"Antique/Metal Ware"), - ('51',"Antique/Miniatures / Collections"), - ('53',"Antique/Musical Instruments"), - ('19',"Antique/Old weapons and militaria"), - ('43',"Antique/Oriental Arts"), - ('47',"Antique/Oriental Arts/Chineese furnitures"), - ('24',"Antique/Others"), - ('8',"Antique/Painting"), - ('25',"Antique/Porcelain, Ceramics, Glassmaking, ..."), - ('13',"Antique/Posters"), - ('56',"Antique/Religiosa"), - ('54',"Antique/Scientific Instruments"), - ('18',"Antique/Sculpture, bronze, eso."), - ('55',"Antique/Tin / Copper wares"), - ('16',"Antique/Toys"), - ('57',"Antique/Verreries"), - ('17',"Antique/Wine"), - ('1',"Contemporary Art"), - ('58',"Cont. Art/Arts"), - ('27',"Cont. Art/Curiosa"), - ('15',"Cont. Art/Jewelry"), - ('30',"Cont. Art/Other Media"), - ('3',"Cont. Art/Photo"), - ('4',"Cont. Art/Painting"), - ('5',"Cont. Art/Sculpture"), - ('48',"Cont. Art/Shows")], - 'Aie Category'), + 'name': fields.char('Category Name', required=True, size=64), + 'priority': fields.float('Priority'), + 'active' : fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the auction lot category without removing it."), + 'aie_categ' : fields.selection([('41', "Unclassifieds"), + ('2', "Antiques"), + ('42', "Antique/African Arts"), + ('59', "Antique/Argenterie"), + ('45', "Antique/Art from the Ivory Coast"), + ('46', "Antique/Art from the Ivory Coast/African Arts"), + ('12', "Antique/Books, manuscripts, eso."), + ('11', "Antique/Carpet and textilles"), + ('14', "Antique/Cartoons"), + ('26', "Antique/Clocks and watches"), + ('31', "Antique/Collectible & art objects"), + ('33', "Antique/Engravings"), + ('10', "Antique/Furnitures"), + ('50', "Antique/Graphic Arts"), + ('37', "Antique/Jewelry"), + ('9', "Antique/Lightings"), + ('52', "Antique/Metal Ware"), + ('51', "Antique/Miniatures / Collections"), + ('53', "Antique/Musical Instruments"), + ('19', "Antique/Old weapons and militaria"), + ('43', "Antique/Oriental Arts"), + ('47', "Antique/Oriental Arts/Chineese furnitures"), + ('24', "Antique/Others"), + ('8', "Antique/Painting"), + ('25', "Antique/Porcelain, Ceramics, Glassmaking, ..."), + ('13', "Antique/Posters"), + ('56', "Antique/Religiosa"), + ('54', "Antique/Scientific Instruments"), + ('18', "Antique/Sculpture, bronze, eso."), + ('55', "Antique/Tin / Copper wares"), + ('16', "Antique/Toys"), + ('57', "Antique/Verreries"), + ('17', "Antique/Wine"), + ('1', "Contemporary Art"), + ('58', "Cont. Art/Arts"), + ('27', "Cont. Art/Curiosa"), + ('15', "Cont. Art/Jewelry"), + ('30', "Cont. Art/Other Media"), + ('3', "Cont. Art/Photo"), + ('4', "Cont. Art/Painting"), + ('5', "Cont. Art/Sculpture"), + ('48', "Cont. Art/Shows")], + 'Aie Category'), } _defaults = { - 'active' : lambda *a: 1, - 'aie_categ' : lambda *a:1, + 'active' : lambda *a: 1, + 'aie_categ' : lambda *a:1, } auction_lot_category() -def _type_get(self, cr, uid,ids): +def _type_get(self, cr, uid, context=None): + if not context: + context = {} cr.execute('select name, name from auction_lot_category order by name') return cr.fetchall() @@ -240,10 +238,10 @@ def _type_get(self, cr, uid,ids): #---------------------------------------------------------- def _inv_constraint(cr, ids): cr.execute('SELECT id, bord_vnd_id, lot_num FROM auction_lots ' - 'WHERE id IN %s', + 'WHERE id IN %s', (tuple(ids),)) for datas in cr.fetchall(): - cr.execute('select count(*) from auction_lots where bord_vnd_id=%s and lot_num=%s', (datas[1],datas[2])) + cr.execute('select count(*) from auction_lots where bord_vnd_id=%s and lot_num=%s', (datas[1], datas[2])) if cr.fetchone()[0]>1: return False return True @@ -253,23 +251,23 @@ class auction_lots(osv.osv): _order = "obj_num,lot_num,id" _description="Object" - def button_not_bought(self,cr,uid,ids,*a): - return self.write(cr,uid,ids, {'state':'unsold'}) - def button_taken_away(self,cr,uid,ids,*a): - return self.write(cr,uid,ids, {'state':'taken_away'}) + def button_not_bought(self, cr, uid, ids, *a): + return self.write(cr, uid, ids, {'state':'unsold'}) + def button_taken_away(self, cr, uid, ids, *a): + return self.write(cr, uid, ids, {'state':'taken_away'}) - def button_unpaid(self,cr,uid,ids,*a): - return self.write(cr,uid,ids, {'state':'draft'}) + def button_unpaid(self, cr, uid, ids, *a): + return self.write(cr, uid, ids, {'state':'draft'}) - def button_draft(self,cr,uid,ids,*a): - return self.write(cr,uid,ids, {'state':'draft'}) + def button_draft(self, cr, uid, ids, *a): + return self.write(cr, uid, ids, {'state':'draft'}) - def button_bought(self,cr,uid,ids,*a): - return self.write(cr,uid,ids, {'state':'sold'}) + def button_bought(self, cr, uid, ids, *a): + return self.write(cr, uid, ids, {'state':'sold'}) def _buyerprice(self, cr, uid, ids, name, args, context): res={} - lots=self.pool.get('auction.lots').browse(cr,uid,ids) + lots=self.pool.get('auction.lots').browse(cr, uid, ids) pt_tax=self.pool.get('account.tax') for lot in lots: amount_total=0.0 @@ -282,7 +280,7 @@ class auction_lots(osv.osv): taxes.append(lot.author_right) if lot.auction_id: taxes += lot.auction_id.buyer_costs - tax=pt_tax.compute(cr,uid,taxes,montant,1) + tax=pt_tax.compute_all(cr, uid, taxes, montant, 1)['taxes'] for t in tax: amount_total+=t['amount'] amount_total += montant @@ -290,9 +288,9 @@ class auction_lots(osv.osv): return res - def _sellerprice(self, cr, uid, ids,*a): + def _sellerprice(self, cr, uid, ids, *a): res={} - lots=self.pool.get('auction.lots').browse(cr,uid,ids) + lots=self.pool.get('auction.lots').browse(cr, uid, ids) pt_tax=self.pool.get('account.tax') for lot in lots: amount_total=0.0 @@ -305,7 +303,7 @@ class auction_lots(osv.osv): taxes.append(lot.bord_vnd_id.tax_id) elif lot.auction_id and lot.auction_id.seller_costs: taxes += lot.auction_id.seller_costs - tax=pt_tax.compute(cr,uid,taxes,montant,1) + tax=pt_tax.compute_all(cr, uid, taxes, montant, 1)['taxes'] for t in tax: amount_total+=t['amount'] res[lot.id] = montant+amount_total @@ -314,7 +312,7 @@ class auction_lots(osv.osv): def _grossprice(self, cr, uid, ids, name, args, context): """gross revenue""" res={} - auction_lots_obj = self.read(cr,uid,ids,['seller_price','buyer_price','auction_id']) + auction_lots_obj = self.read(cr, uid, ids, ['seller_price', 'buyer_price', 'auction_id']) for auction_data in auction_lots_obj: total_tax = 0.0 if auction_data['auction_id']: @@ -338,7 +336,7 @@ class auction_lots(osv.osv): total=(lot.gross_revenue*100.0) /lot.obj_price else: total = 0.0 - res[lot.id]=round(total,2) + res[lot.id]=round(total, 2) return res def onchange_obj_ret(self, cr, uid, ids, obj_ret, *args): @@ -346,14 +344,14 @@ class auction_lots(osv.osv): return {'value': {'obj_price': 0}} return {} - def _costs(self,cr,uid,ids,context,*a): + def _costs(self, cr, uid, ids, context, *a): """ costs: Total credit of analytic account / # objects sold during this auction (excluding analytic lines that are in the analytic journal of the auction date). """ res={} - for lot in self.browse(cr,uid,ids): + for lot in self.browse(cr, uid, ids): som=0.0 if not lot.auction_id: res[lot.id] = 0.0 @@ -362,12 +360,12 @@ class auction_lots(osv.osv): cr.execute('select count(*) from auction_lots where auction_id=%s', (auct_id,)) nb = cr.fetchone()[0] account_analytic_line_obj = self.pool.get('account.analytic.line') - line_ids = account_analytic_line_obj.search(cr, uid, [('account_id', '=', lot.auction_id.account_analytic_id.id),('journal_id', '<>', lot.auction_id.journal_id.id),('journal_id', '<>', lot.auction_id.journal_seller_id.id)]) + line_ids = account_analytic_line_obj.search(cr, uid, [('account_id', '=', lot.auction_id.account_analytic_id.id), ('journal_id', '<>', lot.auction_id.journal_id.id), ('journal_id', '<>', lot.auction_id.journal_seller_id.id)]) #indir_cost=lot.bord_vnd_id.specific_cost_ids #for r in lot.bord_vnd_id.specific_cost_ids: # som+=r.amount - for line in account_analytic_line_obj.browse(cr,uid,line_ids): + for line in account_analytic_line_obj.browse(cr, uid, line_ids): if line.amount: som-=line.amount res[lot.id]=som/nb @@ -376,7 +374,7 @@ class auction_lots(osv.osv): def _netprice(self, cr, uid, ids, name, args, context): """This is the net revenue""" res={} - auction_lots_obj = self.read(cr,uid,ids,['seller_price','buyer_price','auction_id','costs']) + auction_lots_obj = self.read(cr, uid, ids, ['seller_price', 'buyer_price', 'auction_id', 'costs']) for auction_data in auction_lots_obj: total_tax = 0.0 if auction_data['auction_id']: @@ -389,7 +387,7 @@ class auction_lots(osv.osv): total_tax = 0.0 total=0.0 montant=0.0 - auction_lots_obj = self.read(cr,uid,ids,['net_revenue','auction_id','lot_est1','obj_price','state']) + auction_lots_obj = self.read(cr, uid, ids, ['net_revenue', 'auction_id', 'lot_est1', 'obj_price', 'state']) for auction_data in auction_lots_obj: if ((auction_data ['obj_price']==0) and (auction_data['state']=='draft')): montant=auction_data['lot_est1'] @@ -401,93 +399,104 @@ class auction_lots(osv.osv): res[auction_data['id']] = total_tax return res - def _is_paid_vnd(self,cr,uid,ids,*a): + def _is_paid_vnd(self, cr, uid, ids, *a): res = {} - lots=self.browse(cr,uid,ids) + lots=self.browse(cr, uid, ids) for lot in lots: res[lot.id] = False if lot.sel_inv_id: if lot.sel_inv_id.state == 'paid': res[lot.id] = True return res - def _is_paid_ach(self,cr,uid,ids,*a): + + def _is_paid_ach(self, cr, uid, ids, *a): res = {} - lots=self.browse(cr,uid,ids) + lots=self.browse(cr, uid, ids) for lot in lots: res[lot.id] = False if lot.ach_inv_id: if lot.ach_inv_id.state == 'paid': res[lot.id] = True return res + _columns = { - 'bid_lines':fields.one2many('auction.bid_line','lot_id', 'Bids'), - 'auction_id': fields.many2one('auction.dates', 'Auction Date', select=1), - 'bord_vnd_id': fields.many2one('auction.deposit', 'Depositer Inventory', required=True), - 'name': fields.char('Short Description',size=64, required=True), - 'name2': fields.char('Short Description (2)',size=64), - 'lot_type': fields.selection(_type_get, 'Object category', size=64), - 'author_right': fields.many2one('account.tax', 'Author rights'), - 'lot_est1': fields.float('Minimum Estimation'), - 'lot_est2': fields.float('Maximum Estimation'), - 'lot_num': fields.integer('List Number', required=True, select=1 ), - 'create_uid': fields.many2one('res.users', 'Created by', readonly=True), - 'history_ids':fields.one2many('auction.lot.history', 'lot_id', 'Auction history'), - 'lot_local':fields.char('Location',size=64), - 'artist_id':fields.many2one('auction.artists', 'Artist/Author'), - 'artist2_id':fields.many2one('auction.artists', 'Artist/Author 2'), - 'important':fields.boolean('To be Emphatized'), - 'product_id':fields.many2one('product.product', 'Product', required=True), - 'obj_desc': fields.text('Object Description'), - 'obj_num': fields.integer('Catalog Number'), - 'obj_ret': fields.float('Price retired'), - 'obj_comm': fields.boolean('Commission'), - 'obj_price': fields.float('Adjudication price'), - 'ach_avance': fields.float('Buyer Advance'), - 'ach_login': fields.char('Buyer Username',size=64), - 'ach_uid': fields.many2one('res.partner', 'Buyer'), - 'ach_emp': fields.boolean('Taken Away'), - 'is_ok': fields.boolean('Buyer\'s payment'), - 'ach_inv_id': fields.many2one('account.invoice','Buyer Invoice', readonly=True, states={'draft':[('readonly',False)]}), - 'sel_inv_id': fields.many2one('account.invoice','Seller Invoice', readonly=True, states={'draft':[('readonly',False)]}), - 'vnd_lim': fields.float('Seller limit'), - 'vnd_lim_net': fields.boolean('Net limit ?',readonly=True), - 'image': fields.binary('Image'), + 'bid_lines':fields.one2many('auction.bid_line', 'lot_id', 'Bids'), + 'auction_id': fields.many2one('auction.dates', 'Auction Date', select=1), + 'bord_vnd_id': fields.many2one('auction.deposit', 'Depositer Inventory', required=True), + 'name': fields.char('Short Description', size=64, required=True), + 'name2': fields.char('Short Description (2)', size=64), + 'lot_type': fields.selection(_type_get, 'Object category', size=64), + 'author_right': fields.many2one('account.tax', 'Author rights'), + 'lot_est1': fields.float('Minimum Estimation'), + 'lot_est2': fields.float('Maximum Estimation'), + 'lot_num': fields.integer('List Number', required=True, select=1), + 'create_uid': fields.many2one('res.users', 'Created by', readonly=True), + 'history_ids':fields.one2many('auction.lot.history', 'lot_id', 'Auction history'), + 'lot_local':fields.char('Location', size=64), + 'artist_id':fields.many2one('auction.artists', 'Artist/Author'), + 'artist2_id':fields.many2one('auction.artists', 'Artist/Author 2'), + 'important':fields.boolean('To be Emphatized'), + 'product_id':fields.many2one('product.product', 'Product', required=True), + 'obj_desc': fields.text('Object Description'), + 'obj_num': fields.integer('Catalog Number'), + 'obj_ret': fields.float('Price retired'), + 'obj_comm': fields.boolean('Commission'), + 'obj_price': fields.float('Adjudication price'), + 'ach_avance': fields.float('Buyer Advance'), + 'ach_login': fields.char('Buyer Username', size=64), + 'ach_uid': fields.many2one('res.partner', 'Buyer'), + 'ach_emp': fields.boolean('Taken Away', readonly=True), + 'is_ok': fields.boolean('Buyer\'s payment'), + 'ach_inv_id': fields.many2one('account.invoice', 'Buyer Invoice', readonly=True, states={'draft':[('readonly', False)]}), + 'sel_inv_id': fields.many2one('account.invoice', 'Seller Invoice', readonly=True, states={'draft':[('readonly', False)]}), + 'vnd_lim': fields.float('Seller limit'), + 'vnd_lim_net': fields.boolean('Net limit ?', readonly=True), + 'image': fields.binary('Image'), # 'paid_vnd':fields.function(_is_paid_vnd,string='Seller Paid',method=True,type='boolean',store=True), - 'paid_vnd':fields.boolean('Seller Paid'), - 'paid_ach':fields.function(_is_paid_ach,string='Buyer invoice reconciled',method=True, type='boolean',store=True), + 'paid_vnd':fields.boolean('Seller Paid'), + 'paid_ach':fields.function(_is_paid_ach, string='Buyer invoice reconciled', method=True, type='boolean', store=True), 'state': fields.selection(( - ('draft','Draft'), - ('unsold','Unsold'), - ('paid','Paid'), - ('sold','Sold'), - ('taken_away','Taken away')),'State', required=True, readonly=True, + ('draft', 'Draft'), + ('unsold', 'Unsold'), + ('paid', 'Paid'), + ('sold', 'Sold'), + ('taken_away', 'Taken away')), 'State', required=True, readonly=True, help=' * The \'Draft\' state is used when a object is encoding as a new object. \ \n* The \'Unsold\' state is used when object does not sold for long time, user can also set it as draft state after unsold. \ \n* The \'Paid\' state is used when user pay for the object \ - \n* The \'Sold\' state is used when user buy the object.'), - 'buyer_price': fields.function(_buyerprice, method=True, string='Buyer price',store=True), - 'seller_price': fields.function(_sellerprice, method=True, string='Seller price',store=True), - 'gross_revenue':fields.function(_grossprice, method=True, string='Gross revenue',store=True), - 'gross_margin':fields.function(_grossmargin, method=True, string='Gross Margin (%)',store=True), - 'costs':fields.function(_costs,method=True,string='Indirect costs',store=True), - 'statement_id': fields.many2many('account.bank.statement.line', 'auction_statement_line_rel','auction_id', 'statement','Payment'), - 'net_revenue':fields.function(_netprice, method=True, string='Net revenue',store=True), - 'net_margin':fields.function(_netmargin, method=True, string='Net Margin (%)',store=True), + \n* The \'Sold\' state is used when user buy the object.'), + 'buyer_price': fields.function(_buyerprice, method=True, string='Buyer price', store=True), + 'seller_price': fields.function(_sellerprice, method=True, string='Seller price', store=True), + 'gross_revenue':fields.function(_grossprice, method=True, string='Gross revenue', store=True), + 'gross_margin':fields.function(_grossmargin, method=True, string='Gross Margin (%)', store=True), + 'costs':fields.function(_costs, method=True, string='Indirect costs', store=True), + 'statement_id': fields.many2many('account.bank.statement.line', 'auction_statement_line_rel', 'auction_id', 'statement', 'Payment'), + 'net_revenue':fields.function(_netprice, method=True, string='Net revenue', store=True), + 'net_margin':fields.function(_netmargin, method=True, string='Net Margin (%)', store=True), } _defaults = { - 'state':lambda *a: 'draft', - 'lot_num':lambda *a:1, - 'is_ok': lambda *a: False + 'state':lambda *a: 'draft', + 'lot_num':lambda *a:1, + 'is_ok': lambda *a: False, } _constraints = [ # (_inv_constraint, 'Twice the same inventory number !', ['lot_num','bord_vnd_id']) ] + def auction_lots_enable(self, cr, uid, ids, context=None): + if not context: + context={} + return self.write(cr, uid, ids, {'ach_emp': False}) + + def auction_lots_able(self, cr, uid, ids, context=None): + if not context: + context={} + return self.write(cr, uid, ids, {'ach_emp': True}) def name_get(self, cr, user, ids, context={}): if not len(ids): return [] - result = [ (r['id'], str(r['obj_num'])+' - '+r['name']) for r in self.read(cr, user, ids, ['name','obj_num'])] + result = [ (r['id'], str(r['obj_num'])+' - '+r['name']) for r in self.read(cr, user, ids, ['name', 'obj_num'])] return result def name_search(self, cr, user, name, args=None, operator='ilike', context={}): @@ -495,9 +504,9 @@ class auction_lots(osv.osv): args = [] ids = [] if name: - ids = self.search(cr, user, [('obj_num','=',int(name))] + args) + ids = self.search(cr, user, [('obj_num', '=', int(name))] + args) if not ids: - ids = self.search(cr, user, [('name',operator,name)] + args) + ids = self.search(cr, user, [('name', operator, name)] + args) return self.name_get(cr, user, ids) def _sum_taxes_by_type_and_id(self, taxes): @@ -528,7 +537,7 @@ class auction_lots(osv.osv): taxes.append(lot.author_right) elif lot.auction_id: taxes += lot.auction_id.buyer_costs - tax=pt_tax.compute(cr,uid,taxes,lot.obj_price,1) + tax=pt_tax.compute_all(cr, uid, taxes, lot.obj_price, 1)['taxes'] for t in tax: amount+=t['amount'] #amount+=lot.obj_price*0.2 @@ -560,7 +569,8 @@ class auction_lots(osv.osv): tax_cost_ids.append(border_id.tax_id) elif lot.auction_id and lot.auction_id.seller_costs: tax_cost_ids += lot.auction_id.seller_costs - tax_costs = self.pool.get('account.tax').compute(cr, uid, tax_cost_ids, lot.obj_price, 1) + + tax_costs = self.pool.get('account.tax').compute_all(cr, uid, tax_cost_ids, lot.obj_price, 1)['taxes'] # delete useless keys from the costs computed by the tax object... this is useless but cleaner... for cost in tax_costs: del cost['account_paid_id'] @@ -575,13 +585,14 @@ class auction_lots(osv.osv): #FIXME: la string 'remise lot' devrait passer par le systeme de traductions obj_price_wh_costs = reduce(lambda x, y: x + y['amount'], tax_costs, lot.obj_price) if obj_price_wh_costs < lot.vnd_lim: - costs.append({ 'type': 1, - 'id': lot.obj_num, - 'name': 'Remise lot '+ str(lot.obj_num), + costs.append({ 'type': 1, + 'id': lot.obj_num, + 'name': 'Remise lot '+ str(lot.obj_num), 'amount': lot.vnd_lim - obj_price_wh_costs} #'account_id': lot.auction_id.acc_refund.id ) return costs + def compute_seller_costs(self, cr, uid, ids, manual_only=False): lots = self.browse(cr, uid, ids) costs = [] @@ -641,14 +652,14 @@ class auction_lots(osv.osv): taxes_summed[key] = tax return taxes_summed.values() - def buyer_proforma(self,cr,uid,ids,context): + def buyer_proforma(self, cr, uid, ids, context): invoices = {} inv_ref = self.pool.get('account.invoice') partner_r = self.pool.get('res.partner') inv_line_obj = self.pool.get('account.invoice.line') wf_service = netsvc.LocalService('workflow') # acc_receiv=self.pool.get('account.account').search([cr,uid,[('code','=','4010')]]) - for lot in self.browse(cr,uid,ids,context): + for lot in self.browse(cr, uid, ids, context): if not lot.obj_price>0: continue if not lot.ach_uid.id: @@ -662,17 +673,17 @@ class auction_lots(osv.osv): if not invoice_addr_id: raise orm.except_orm(_('No Invoice Address'), _('The Buyer "%s" has no Invoice Address.') % (contact_addr_id,)) inv = { - 'name': 'Auction proforma:' +lot.name, - 'journal_id': lot.auction_id.journal_id.id, - 'partner_id': partner_ref, - 'type': 'out_invoice', + 'name': 'Auction proforma:' +lot.name, + 'journal_id': lot.auction_id.journal_id.id, + 'partner_id': partner_ref, + 'type': 'out_invoice', # 'state':'proforma', } - inv.update(inv_ref.onchange_partner_id(cr,uid, [], 'out_invoice', partner_ref)['value']) + inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'out_invoice', partner_ref)['value']) inv['account_id'] = inv['account_id'] and inv['account_id'][0] inv_id = inv_ref.create(cr, uid, inv, context) invoices[partner_ref] = inv_id - self.write(cr,uid,[lot.id],{'ach_inv_id':inv_id,'state':'sold'}) + self.write(cr, uid, [lot.id], {'ach_inv_id':inv_id, 'state':'sold'}) #calcul des taxes taxes = map(lambda x: x.id, lot.product_id.taxes_id) @@ -681,16 +692,16 @@ class auction_lots(osv.osv): taxes.append(lot.author_right.id) inv_line= { - 'invoice_id': inv_id, - 'quantity': 1, - 'product_id': lot.product_id.id, - 'name': 'proforma'+'['+str(lot.obj_num)+'] '+ lot.name, - 'invoice_line_tax_id': [(6,0,taxes)], - 'account_analytic_id': lot.auction_id.account_analytic_id.id, - 'account_id': lot.auction_id.acc_income.id, - 'price_unit': lot.obj_price, + 'invoice_id': inv_id, + 'quantity': 1, + 'product_id': lot.product_id.id, + 'name': 'proforma'+'['+str(lot.obj_num)+'] '+ lot.name, + 'invoice_line_tax_id': [(6, 0, taxes)], + 'account_analytic_id': lot.auction_id.account_analytic_id.id, + 'account_id': lot.auction_id.acc_income.id, + 'price_unit': lot.obj_price, } - inv_line_obj.create(cr, uid, inv_line,context) + inv_line_obj.create(cr, uid, inv_line, context) # inv_ref.button_compute(cr, uid, [inv_id]) # wf_service = netsvc.LocalService('workflow') # wf_service.trg_validate(uid, 'account.invoice', inv_id, 'invoice_open', cr) @@ -701,7 +712,7 @@ class auction_lots(osv.osv): # creates the transactions between the auction company and the seller # this is done by creating a new in_invoice for each - def seller_trans_create(self,cr, uid,ids,context): + def seller_trans_create(self, cr, uid, ids, context): """ Create a seller invoice for each bord_vnd_id, for selected ids. """ @@ -711,7 +722,7 @@ class auction_lots(osv.osv): partner_obj = self.pool.get('res.partner') inv_line_obj = self.pool.get('account.invoice.line') wf_service = netsvc.LocalService('workflow') - for lot in self.browse(cr,uid,ids,context): + for lot in self.browse(cr, uid, ids, context): partner_id = lot.bord_vnd_id.partner_id.id if not lot.auction_id.id: continue @@ -723,17 +734,17 @@ class auction_lots(osv.osv): contact_addr_id = res['contact'] invoice_addr_id = res['invoice'] inv = { - 'name': 'Auction:' +lot.name, - 'journal_id': lot.auction_id.journal_seller_id.id, - 'partner_id': lot.bord_vnd_id.partner_id.id, - 'type': 'in_invoice', + 'name': 'Auction:' +lot.name, + 'journal_id': lot.auction_id.journal_seller_id.id, + 'partner_id': lot.bord_vnd_id.partner_id.id, + 'type': 'in_invoice', } - inv.update(inv_ref.onchange_partner_id(cr,uid, [], 'in_invoice', lot.bord_vnd_id.partner_id.id)['value']) + inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'in_invoice', lot.bord_vnd_id.partner_id.id)['value']) # inv['account_id'] = inv['account_id'] and inv['account_id'][0] inv_id = inv_ref.create(cr, uid, inv, context) invoices[lot.bord_vnd_id.id] = inv_id - self.write(cr,uid,[lot.id],{'sel_inv_id':inv_id,'state':'sold'}) + self.write(cr, uid, [lot.id], {'sel_inv_id':inv_id, 'state':'sold'}) taxes = map(lambda x: x.id, lot.product_id.taxes_id) if lot.bord_vnd_id.tax_id: @@ -742,16 +753,16 @@ class auction_lots(osv.osv): taxes += map(lambda x: x.id, lot.auction_id.seller_costs) inv_line= { - 'invoice_id': inv_id, - 'quantity': 1, - 'product_id': lot.product_id.id, - 'name': '['+str(lot.obj_num)+'] '+lot.auction_id.name, - 'invoice_line_tax_id': [(6,0,taxes)], - 'account_analytic_id': lot.auction_id.account_analytic_id.id, - 'account_id': lot.auction_id.acc_expense.id, - 'price_unit': lot.obj_price, + 'invoice_id': inv_id, + 'quantity': 1, + 'product_id': lot.product_id.id, + 'name': '['+str(lot.obj_num)+'] '+lot.auction_id.name, + 'invoice_line_tax_id': [(6, 0, taxes)], + 'account_analytic_id': lot.auction_id.account_analytic_id.id, + 'account_id': lot.auction_id.acc_expense.id, + 'price_unit': lot.obj_price, } - inv_line_obj.create(cr, uid, inv_line,context) + inv_line_obj.create(cr, uid, inv_line, context) inv_ref.button_compute(cr, uid, invoices.values()) for inv in inv_ref.browse(cr, uid, invoices.values(), context): inv_ref.write(cr, uid, [inv.id], { @@ -760,7 +771,7 @@ class auction_lots(osv.osv): wf_service.trg_validate(uid, 'account.invoice', inv.id, 'invoice_open', cr) return invoices.values() - def lots_invoice(self, cr, uid, ids, context,invoice_number=False): + def lots_invoice(self, cr, uid, ids, context, invoice_number=False): """(buyer invoice Create an invoice for selected lots (IDS) to BUYER_ID. Set created invoice to the ACTION state. @@ -777,14 +788,14 @@ class auction_lots(osv.osv): inv_line_obj = self.pool.get('account.invoice.line') wf_service = netsvc.LocalService('workflow') invoices={} - for lot in self.browse(cr, uid, ids,context): + for lot in self.browse(cr, uid, ids, context): # partner_ref = lot.ach_uid.id if not lot.auction_id.id: continue if not lot.ach_uid.id: raise orm.except_orm(_('Missed buyer !'), _('The object "%s" has no buyer assigned.') % (lot.name,)) - if (lot.auction_id.id,lot.ach_uid.id) in invoices: - inv_id = invoices[(lot.auction_id.id,lot.ach_uid.id)] + if (lot.auction_id.id, lot.ach_uid.id) in invoices: + inv_id = invoices[(lot.auction_id.id, lot.ach_uid.id)] else: add = partner_r.read(cr, uid, [lot.ach_uid.id], ['address'])[0]['address'] if not len(add): @@ -792,19 +803,19 @@ class auction_lots(osv.osv): price = lot.obj_price or 0.0 lot_name =lot.obj_num inv = { - 'name':lot.auction_id.name or '', - 'reference': lot.ach_login, - 'journal_id': lot.auction_id.journal_id.id, - 'partner_id': lot.ach_uid.id, - 'type': 'out_invoice', + 'name':lot.auction_id.name or '', + 'reference': lot.ach_login, + 'journal_id': lot.auction_id.journal_id.id, + 'partner_id': lot.ach_uid.id, + 'type': 'out_invoice', } if invoice_number: inv['number'] = invoice_number - inv.update(inv_ref.onchange_partner_id(cr,uid, [], 'out_invoice', lot.ach_uid.id)['value']) + inv.update(inv_ref.onchange_partner_id(cr, uid, [], 'out_invoice', lot.ach_uid.id)['value']) #inv['account_id'] = inv['account_id'] and inv['account_id'][0] inv_id = inv_ref.create(cr, uid, inv, context) - invoices[(lot.auction_id.id,lot.ach_uid.id)] = inv_id - self.write(cr,uid,[lot.id],{'ach_inv_id':inv_id,'state':'sold'}) + invoices[(lot.auction_id.id, lot.ach_uid.id)] = inv_id + self.write(cr, uid, [lot.id], {'ach_inv_id':inv_id, 'state':'sold'}) #calcul des taxes taxes = map(lambda x: x.id, lot.product_id.taxes_id) taxes+=map(lambda x:x.id, lot.auction_id.buyer_costs) @@ -812,22 +823,22 @@ class auction_lots(osv.osv): taxes.append(lot.author_right.id) inv_line= { - 'invoice_id': inv_id, - 'quantity': 1, - 'product_id': lot.product_id.id, - 'name': '['+str(lot.obj_num)+'] '+ lot.name, - 'invoice_line_tax_id': [(6,0,taxes)], - 'account_analytic_id': lot.auction_id.account_analytic_id.id, - 'account_id': lot.auction_id.acc_income.id, - 'price_unit': lot.obj_price, + 'invoice_id': inv_id, + 'quantity': 1, + 'product_id': lot.product_id.id, + 'name': '['+str(lot.obj_num)+'] '+ lot.name, + 'invoice_line_tax_id': [(6, 0, taxes)], + 'account_analytic_id': lot.auction_id.account_analytic_id.id, + 'account_id': lot.auction_id.acc_income.id, + 'price_unit': lot.obj_price, } - inv_line_obj.create(cr, uid, inv_line,context) + inv_line_obj.create(cr, uid, inv_line, context) # inv_ref.button_compute(cr, uid, [inpq tu dis cav_id]) # inv_ref.button_compute(cr, uid, [inv_id]) inv_ref.button_compute(cr, uid, [inv_id]) for l in inv_ref.browse(cr, uid, invoices.values(), context): # wf_service.trg_validate(uid, 'account.invoice',l.id, 'invoice_proforma', cr) - wf_service.trg_validate(uid, 'account.invoice',l.id, 'invoice_open', cr) + wf_service.trg_validate(uid, 'account.invoice', l.id, 'invoice_open', cr) return invoices.values() @@ -854,14 +865,14 @@ class auction_bid(osv.osv): _description="Bid auctions" _order = 'id desc' _columns = { - 'partner_id': fields.many2one('res.partner', 'Buyer Name', required=True), - 'contact_tel':fields.char('Contact',size=64), - 'name': fields.char('Bid ID', size=64,required=True), - 'auction_id': fields.many2one('auction.dates', 'Auction Date', required=True), - 'bid_lines': fields.one2many('auction.bid_line', 'bid_id', 'Bid'), + 'partner_id': fields.many2one('res.partner', 'Buyer Name', required=True), + 'contact_tel':fields.char('Contact', size=64), + 'name': fields.char('Bid ID', size=64, required=True), + 'auction_id': fields.many2one('auction.dates', 'Auction Date', required=True), + 'bid_lines': fields.one2many('auction.bid_line', 'bid_id', 'Bid'), } _defaults = { - 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'auction.bid'), + 'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'auction.bid'), } def onchange_contact(self, cr, uid, ids, partner_id): if not partner_id: @@ -879,10 +890,10 @@ class auction_lot_history(osv.osv): _name = "auction.lot.history" _description="Lot history" _columns = { - 'name': fields.date('Date',size=64), - 'lot_id': fields.many2one('auction.lots','Object', required=True, ondelete='cascade'), - 'auction_id': fields.many2one('auction.dates', 'Auction date', required=True, ondelete='cascade'), - 'price': fields.float('Withdrawn price', digits=(16,2)) + 'name': fields.date('Date', size=64), + 'lot_id': fields.many2one('auction.lots', 'Object', required=True, ondelete='cascade'), + 'auction_id': fields.many2one('auction.dates', 'Auction date', required=True, ondelete='cascade'), + 'price': fields.float('Withdrawn price', digits=(16, 2)) } _defaults = { 'name': lambda *args: time.strftime('%Y-%m-%d') @@ -900,11 +911,11 @@ class auction_bid_lines(osv.osv): # res[lot.id] = lot.lot_id.auction_id.name # return res _columns = { - 'name': fields.char('Bid date',size=64), - 'bid_id': fields.many2one('auction.bid','Bid ID', required=True, ondelete='cascade'), - 'lot_id': fields.many2one('auction.lots','Object', required=True, ondelete='cascade'), - 'call': fields.boolean('To be Called'), - 'price': fields.float('Maximum Price'), + 'name': fields.char('Bid date', size=64), + 'bid_id': fields.many2one('auction.bid', 'Bid ID', required=True, ondelete='cascade'), + 'lot_id': fields.many2one('auction.lots', 'Object', required=True, ondelete='cascade'), + 'call': fields.boolean('To be Called'), + 'price': fields.float('Maximum Price'), 'auction': fields.char(string='Auction Name', size=64) } _defaults = { @@ -926,13 +937,13 @@ class report_buyer_auction(osv.osv): _description = "Auction Reporting on buyer view" _auto = False _columns = { - 'buyer_login': fields.char('Buyer Login',size=64, readonly=True, select=1), - 'buyer':fields.many2one('res.partner', 'Buyer', readonly=True, select=2), - 'object':fields.integer('No of objects',readonly=True, select=1), - 'total_price':fields.float('Total Adj.', digits=(16,2), readonly=True, select=2), - 'avg_price':fields.float('Avg Adj.', digits=(16,2), readonly=True, select=2), - 'date': fields.date('Create Date', select=1), - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), + 'buyer_login': fields.char('Buyer Login', size=64, readonly=True, select=1), + 'buyer':fields.many2one('res.partner', 'Buyer', readonly=True, select=2), + 'object':fields.integer('No of objects', readonly=True, select=1), + 'total_price':fields.float('Total Adj.', digits=(16, 2), readonly=True, select=2), + 'avg_price':fields.float('Avg Adj.', digits=(16, 2), readonly=True, select=2), + 'date': fields.date('Create Date', select=1), + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), } @@ -966,14 +977,14 @@ class report_buyer_auction2(osv.osv): _description = "Auction Reporting on buyer view" _auto = False _columns = { - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), - 'buyer_login': fields.char('Buyer Login',size=64, readonly=True, select=True), - 'buyer':fields.many2one('res.partner', 'Buyer', readonly=True, select=2), - 'sumadj':fields.float('Sum of adjustication',readonly=True), - 'gross_revenue':fields.float('Gross Revenue', readonly=True), - 'net_revenue':fields.float('Net Revenue', readonly=True), - 'net_margin':fields.float('Net Margin', readonly=True), - 'date': fields.date('Create Date', required=True) + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'buyer_login': fields.char('Buyer Login', size=64, readonly=True, select=True), + 'buyer':fields.many2one('res.partner', 'Buyer', readonly=True, select=2), + 'sumadj':fields.float('Sum of adjustication', readonly=True), + 'gross_revenue':fields.float('Gross Revenue', readonly=True), + 'net_revenue':fields.float('Net Revenue', readonly=True), + 'net_margin':fields.float('Net Margin', readonly=True), + 'date': fields.date('Create Date', required=True) } def init(self, cr): cr.execute(''' @@ -1008,14 +1019,14 @@ class report_seller_auction(osv.osv): _auto = False _rec_name = 'date' _columns = { - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), - 'seller': fields.many2one('res.partner','Seller',readonly=True, select=1), - 'object_number':fields.integer('No of Objects',readonly=True), - 'total_price':fields.float('Total adjudication',readonly=True), - 'avg_price':fields.float('Avg adjudication',readonly=True), - 'avg_estimation':fields.float('Avg estimation',readonly=True), - 'date': fields.date('Create Date', required=True, select=1), - 'state': fields.selection((('draft','Draft'),('unsold','Unsold'),('sold','Sold')),'State',readonly=True, select=1) + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'seller': fields.many2one('res.partner', 'Seller', readonly=True, select=1), + 'object_number':fields.integer('No of Objects', readonly=True), + 'total_price':fields.float('Total adjudication', readonly=True), + 'avg_price':fields.float('Avg adjudication', readonly=True), + 'avg_estimation':fields.float('Avg estimation', readonly=True), + 'date': fields.date('Create Date', required=True, select=1), + 'state': fields.selection((('draft', 'Draft'), ('unsold', 'Unsold'), ('sold', 'Sold')), 'State', readonly=True, select=1) } def init(self, cr): @@ -1049,13 +1060,13 @@ class report_seller_auction2(osv.osv): _auto = False _rec_name = 'date' _columns = { - 'seller': fields.many2one('res.partner','Seller',readonly=True, select=1), - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), - 'sum_adj':fields.float('Sum Adjustication',readonly=True, select=2), - 'gross_revenue':fields.float('Gross revenue',readonly=True, select=2), - 'net_revenue':fields.float('Net revenue',readonly=True, select=2), - 'net_margin':fields.float('Net margin', readonly=True, select=2), - 'date': fields.date('Auction date', required=1), + 'seller': fields.many2one('res.partner', 'Seller', readonly=True, select=1), + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'sum_adj':fields.float('Sum Adjustication', readonly=True, select=2), + 'gross_revenue':fields.float('Gross revenue', readonly=True, select=2), + 'net_revenue':fields.float('Net revenue', readonly=True, select=2), + 'net_margin':fields.float('Net margin', readonly=True, select=2), + 'date': fields.date('Auction date', required=1), } def init(self, cr): @@ -1085,14 +1096,14 @@ class report_auction_view2(osv.osv): _auto = False _rec_name = 'date' _columns = { - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), - 'sum_adj':fields.float('Sum of adjudication',readonly=True), - 'obj_number':fields.integer('# of Objects',readonly=True), - 'gross_revenue':fields.float('Gross revenue',readonly=True), - 'net_revenue':fields.float('Net revenue',readonly=True), - 'obj_margin':fields.float('Avg margin', readonly=True), - 'obj_margin_procent':fields.float('Net margin (%)', readonly=True), - 'date': fields.date('Auction date', required=True, select=1) + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'sum_adj':fields.float('Sum of adjudication', readonly=True), + 'obj_number':fields.integer('# of Objects', readonly=True), + 'gross_revenue':fields.float('Gross revenue', readonly=True), + 'net_revenue':fields.float('Net revenue', readonly=True), + 'obj_margin':fields.float('Avg margin', readonly=True), + 'obj_margin_procent':fields.float('Net margin (%)', readonly=True), + 'date': fields.date('Auction date', required=True, select=1) } def init(self, cr): cr.execute('''create or replace view report_auction_view2 as ( @@ -1123,13 +1134,13 @@ class report_auction_view(osv.osv): _auto = False _rec_name = 'auction_id' _columns = { - 'auction_id': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), - 'nobjects':fields.float('No of objects',readonly=True), - 'nbuyer':fields.float('No of buyers',readonly=True), - 'nseller':fields.float('No of sellers',readonly=True), - 'min_est':fields.float('Minimum Estimation', readonly=True, select=2), - 'max_est':fields.float('Maximum Estimation', readonly=True, select=2), - 'adj_price':fields.float('Adjudication price', readonly=True, select=2), + 'auction_id': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'nobjects':fields.float('No of objects', readonly=True), + 'nbuyer':fields.float('No of buyers', readonly=True), + 'nseller':fields.float('No of sellers', readonly=True), + 'min_est':fields.float('Minimum Estimation', readonly=True, select=2), + 'max_est':fields.float('Maximum Estimation', readonly=True, select=2), + 'adj_price':fields.float('Adjudication price', readonly=True, select=2), 'obj_ret':fields.integer('# obj ret', readonly=True, select=2) } @@ -1158,10 +1169,10 @@ class report_auction_object_date(osv.osv): _description = "Objects per day" _auto = False _columns = { - 'obj_num': fields.integer('# of Objects'), - 'name': fields.date('Created date', select=2), - 'month': fields.date('Month', select=1), - 'user_id':fields.many2one('res.users', 'User',select=1), + 'obj_num': fields.integer('# of Objects'), + 'name': fields.date('Created date', select=2), + 'month': fields.date('Month', select=1), + 'user_id':fields.many2one('res.users', 'User', select=1), } #l.create_uid as user, @@ -1189,12 +1200,12 @@ class report_auction_estimation_adj_category(osv.osv): _auto = False _rec_name='date' _columns = { - 'lot_est1': fields.float('Minimum Estimation',select=2), - 'lot_est2': fields.float('Maximum Estimation',select=2), + 'lot_est1': fields.float('Minimum Estimation', select=2), + 'lot_est2': fields.float('Maximum Estimation', select=2), # 'obj_price': fields.float('Adjudication price'), - 'date': fields.date('Date', readonly=True,select=1), - 'lot_type': fields.selection(_type_get, 'Object Type', size=64), - 'adj_total': fields.float('Total Adjudication',select=2), + 'date': fields.date('Date', readonly=True, select=1), + 'lot_type': fields.selection(_type_get, 'Object Type', size=64), + 'adj_total': fields.float('Total Adjudication', select=2), 'user_id':fields.many2one('res.users', 'User', select=1) } @@ -1224,11 +1235,11 @@ class report_auction_adjudication(osv.osv): _description = "report_auction_adjudication" _auto = False _columns = { - 'name': fields.many2one('auction.dates','Auction date',readonly=True,select=1), - 'state': fields.selection((('draft','Draft'),('close','Closed')),'State', select=1), - 'adj_total': fields.float('Total Adjudication'), - 'date': fields.date('Date', readonly=True,select=1), - 'user_id':fields.many2one('res.users', 'User',select=1) + 'name': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), + 'state': fields.selection((('draft', 'Draft'), ('close', 'Closed')), 'State', select=1), + 'adj_total': fields.float('Total Adjudication'), + 'date': fields.date('Date', readonly=True, select=1), + 'user_id':fields.many2one('res.users', 'User', select=1) } @@ -1260,9 +1271,9 @@ class report_attendance(osv.osv): _auto = False #_rec_name='date' _columns = { - 'name': fields.date('Date', readonly=True,select=1), - 'employee_id' : fields.many2one('hr.employee', "Employee's Name", select=1, readonly=True), - 'total_attendance': fields.float('Total', readonly=True), + 'name': fields.date('Date', readonly=True, select=1), + 'employee_id' : fields.many2one('hr.employee', "Employee's Name", select=1, readonly=True), + 'total_attendance': fields.float('Total', readonly=True), } def init(self, cr): cr.execute("""CREATE OR REPLACE VIEW report_attendance AS @@ -1301,11 +1312,11 @@ class report_deposit_border(osv.osv): _auto = False _rec_name='bord' _columns = { - 'bord': fields.char('Depositer Inventory', size=64, required=True), - 'seller': fields.many2one('res.partner','Seller',select=1), - 'moy_est' : fields.float('Avg. Est', select=1, readonly=True), - 'total_marge': fields.float('Total margin', readonly=True), - 'nb_obj':fields.float('# of objects', readonly=True), + 'bord': fields.char('Depositer Inventory', size=64, required=True), + 'seller': fields.many2one('res.partner', 'Seller', select=1), + 'moy_est' : fields.float('Avg. Est', select=1, readonly=True), + 'total_marge': fields.float('Total margin', readonly=True), + 'nb_obj':fields.float('# of objects', readonly=True), } def init(self, cr): cr.execute("""CREATE OR REPLACE VIEW report_deposit_border AS @@ -1331,16 +1342,16 @@ class report_object_encoded(osv.osv): _description = "Object encoded" _auto = False _columns = { - 'state': fields.selection((('draft','Draft'),('unsold','Unsold'),('paid','Paid'),('invoiced','Invoiced')),'State', required=True,select=1), - 'user_id':fields.many2one('res.users', 'User', select=1), - 'estimation': fields.float('Estimation',select=2), - 'date': fields.date('Create Date', required=True), + 'state': fields.selection((('draft', 'Draft'), ('unsold', 'Unsold'), ('paid', 'Paid'), ('invoiced', 'Invoiced')), 'State', required=True, select=1), + 'user_id':fields.many2one('res.users', 'User', select=1), + 'estimation': fields.float('Estimation', select=2), + 'date': fields.date('Create Date', required=True), # 'gross_revenue':fields.float('Gross revenue',readonly=True, select=2), # 'net_revenue':fields.float('Net revenue',readonly=True, select=2), # 'obj_margin':fields.float('Net margin', readonly=True, select=2), - 'obj_ret':fields.integer('# obj ret', readonly=True, select=2), + 'obj_ret':fields.integer('# obj ret', readonly=True, select=2), # 'adj':fields.integer('Adj.', readonly=True, select=2), - 'obj_num':fields.integer('# of Encoded obj.', readonly=True, select=2), + 'obj_num':fields.integer('# of Encoded obj.', readonly=True, select=2), } def init(self, cr): cr.execute('''create or replace view report_object_encoded as @@ -1363,15 +1374,15 @@ class report_object_encoded_manager(osv.osv): _description = "Object encoded" _auto = False _columns = { - 'user_id':fields.many2one('res.users', 'User', select=True), - 'estimation': fields.float('Estimation',select=True), - 'date': fields.date('Create Date', required=True), - 'gross_revenue':fields.float('Gross revenue',readonly=True, select=True), - 'net_revenue':fields.float('Net revenue',readonly=True, select=True), - 'obj_margin':fields.float('Net margin', readonly=True, select=True), - 'obj_ret':fields.integer('# obj ret', readonly=True, select=True), - 'adj':fields.integer('Adj.', readonly=True, select=True), - 'obj_num':fields.integer('# of Encoded obj.', readonly=True, select=True), + 'user_id':fields.many2one('res.users', 'User', select=True), + 'estimation': fields.float('Estimation', select=True), + 'date': fields.date('Create Date', required=True), + 'gross_revenue':fields.float('Gross revenue', readonly=True, select=True), + 'net_revenue':fields.float('Net revenue', readonly=True, select=True), + 'obj_margin':fields.float('Net margin', readonly=True, select=True), + 'obj_ret':fields.integer('# obj ret', readonly=True, select=True), + 'adj':fields.integer('Adj.', readonly=True, select=True), + 'obj_num':fields.integer('# of Encoded obj.', readonly=True, select=True), } def init(self, cr): cr.execute('''create or replace view report_object_encoded_manager as @@ -1397,18 +1408,18 @@ class report_unclassified_objects(osv.osv): _description = "Unclassified objects " _auto = False _columns = { - 'name': fields.char('Short Description',size=64, required=True), - 'obj_num': fields.integer('Catalog Number'), - 'obj_price': fields.float('Adjudication price'), - 'lot_num': fields.integer('List Number', required=True, select=1 ), - 'state': fields.selection((('draft','Draft'),('unsold','Unsold'),('paid','Paid'),('sold','Sold')),'State', required=True, readonly=True), - 'obj_comm': fields.boolean('Commission'), - 'bord_vnd_id': fields.many2one('auction.deposit', 'Depositer Inventory', required=True), - 'ach_login': fields.char('Buyer Username',size=64), - 'lot_est1': fields.float('Minimum Estimation'), - 'lot_est2': fields.float('Maximum Estimation'), - 'lot_type': fields.selection(_type_get, 'Object category', size=64), - 'auction': fields.many2one('auction.dates', 'Auction date',readonly=True, select=1), + 'name': fields.char('Short Description', size=64, required=True), + 'obj_num': fields.integer('Catalog Number'), + 'obj_price': fields.float('Adjudication price'), + 'lot_num': fields.integer('List Number', required=True, select=1), + 'state': fields.selection((('draft', 'Draft'), ('unsold', 'Unsold'), ('paid', 'Paid'), ('sold', 'Sold')), 'State', required=True, readonly=True), + 'obj_comm': fields.boolean('Commission'), + 'bord_vnd_id': fields.many2one('auction.deposit', 'Depositer Inventory', required=True), + 'ach_login': fields.char('Buyer Username', size=64), + 'lot_est1': fields.float('Minimum Estimation'), + 'lot_est2': fields.float('Maximum Estimation'), + 'lot_type': fields.selection(_type_get, 'Object category', size=64), + 'auction': fields.many2one('auction.dates', 'Auction date', readonly=True, select=1), } def init(self, cr): cr.execute("""create or replace view report_unclassified_objects as diff --git a/addons/auction/auction_demo.xml b/addons/auction/auction_demo.xml index 22a5cabb1cd..fe48ae3df74 100644 --- a/addons/auction/auction_demo.xml +++ b/addons/auction/auction_demo.xml @@ -10,52 +10,52 @@ - Bruxelles1 - Benoit Mortie1r1 - 1030 - + Bruxelles1 + Benoit Mortie1r1 + 1030 + + + info@opensides.be + (+32)2 211 34 83 + Rue des Palais 44, bte 33 + default + + - info@opensides.be - (+32)2 211 34 83 - Rue des Palais 44, bte 33 - default - - - - Avignon CEDEX 091 - Laurent Jacot1 - 84911 - - contact@tecsas.fr - (+33)4.32.74.10.57 - 85 rue du traite de Rome - default - - - - Louvain-la-Neuve - Thomas Passot - 1348 - - info@mediapole.net - (+32).10.45.17.73 - Rue de l'Angelique, 1 - - + + Avignon CEDEX 091 + Laurent Jacot1 + 84911 + + contact@tecsas.fr + (+33)4.32.74.10.57 + 85 rue du traite de Rome + default + + + + Louvain-la-Neuve + Thomas Passot + 1348 + + info@mediapole.net + (+32).10.45.17.73 + Rue de l'Angelique, 1 + + + Philippe Lavilier 1345-1450 + POREAU OSWALD 1877-1955 - - - @@ -98,8 +98,8 @@ sabam - + TVA 0.12 @@ -108,14 +108,12 @@ - TVA1 0.2 auction - Buyer Costs @@ -123,7 +121,6 @@ auction - Seller Costs1 @@ -131,7 +128,6 @@ auction - Seller Costs @@ -141,8 +137,8 @@ - + Frais de vente -0.15 @@ -151,22 +147,20 @@ - + Frais de vente 0 auction + Oeuvres a 21% - - - diff --git a/addons/auction/auction_report.xml b/addons/auction/auction_report.xml index 17e7e07e968..eec4cf966cd 100644 --- a/addons/auction/auction_report.xml +++ b/addons/auction/auction_report.xml @@ -96,7 +96,7 @@ xml="auction/report/lots_list_landscape.xml" xsl="auction/report/lots_list_landscape.xsl" id="lot_list_inv" - multi="1"/> + multi="1"/> - ======================================================= - Auction Management/Configuration/artist - ======================================================= + + + auction.artists.tree auction.artists @@ -42,9 +42,9 @@ - ======================================================= - Auction Management/Configuration/objectcategories - ======================================================= + + + auction.lot.category.tree auction.lot.category @@ -76,9 +76,9 @@ - ======================================================= - Auction Management/Auction Dates/New Auction Dates - ======================================================= + + + Auction dates auction.dates @@ -88,9 +88,11 @@ + + Auction dates auction.dates @@ -98,41 +100,107 @@
- - - - - - - - - - - - - - - - - -