2024-03-11 14:29:46 -04:00
from odoo import models , fields , api
2024-09-30 16:24:15 -04:00
2024-03-11 14:29:46 -04:00
class SaleOrderDuplicationWizard ( models . TransientModel ) :
2024-09-30 16:24:15 -04:00
_name = " sale.order.duplication.wizard "
_description = " Wizard for duplicating a sale order "
2024-03-11 14:29:46 -04:00
2024-09-30 16:24:15 -04:00
original_order_id = fields . Many2one (
" sale.order " , string = " Original Order " , required = True
)
new_quot = fields . Char (
string = " New Quotation Name " , compute = " _compute_new_quot " , store = True
)
2024-03-11 14:29:46 -04:00
2024-09-30 16:24:15 -04:00
duplicate_all_lines = fields . Boolean ( string = " Duplicate All Lines? " , default = True )
2024-03-11 14:29:46 -04:00
lines_to_duplicate = fields . One2many (
2024-09-30 16:24:15 -04:00
" sale.order.line.duplication.wizard " ,
" wizard_id " ,
2024-03-11 14:29:46 -04:00
string = " Lines to Duplicate " ,
2024-09-30 16:24:15 -04:00
context = { " default_original_order_id " : original_order_id } ,
2024-03-11 14:29:46 -04:00
)
2024-09-30 16:24:15 -04:00
purpose = fields . Text ( string = " Purpose " )
note = fields . Html ( string = " Note " )
2024-03-11 14:29:46 -04:00
@api.model
def default_get ( self , fields_list ) :
res = super ( SaleOrderDuplicationWizard , self ) . default_get ( fields_list )
2024-09-30 16:24:15 -04:00
if " default_original_order_id " in self . env . context :
original_order_id = self . env . context [ " default_original_order_id " ]
original_order = self . env [ " sale.order " ] . browse ( original_order_id )
2024-03-11 14:29:46 -04:00
lines_vals = [ ]
for line in original_order . order_line :
2024-09-30 16:24:15 -04:00
lines_vals . append ( ( 0 , 0 , { " sale_order_line_id " : line . id } ) )
res . update (
{
" lines_to_duplicate " : lines_vals ,
" purpose " : (
original_order . purpose if " purpose " in fields_list else " "
) ,
" note " : original_order . note if " note " in fields_list else " " ,
}
)
2024-03-11 14:29:46 -04:00
return res
def action_duplicate_order ( self ) :
self . ensure_one ( )
# Duplication de la commande de vente
2024-09-30 16:24:15 -04:00
new_order = self . original_order_id . copy (
{
" purpose " : self . purpose ,
" note " : self . note ,
# Assurez-vous que 'new_quot' est défini correctement dans votre modèle
" name " : self . new_quot ,
}
)
2024-03-11 14:29:46 -04:00
if not self . duplicate_all_lines :
new_order . order_line . unlink ( )
2024-09-30 16:24:15 -04:00
for line_wiz in self . lines_to_duplicate . filtered ( " to_duplicate " ) :
line_wiz . sale_order_line_id . copy ( { " order_id " : new_order . id } )
2024-03-11 14:29:46 -04:00
# Préparation et envoi des messages de notification dans le chatter
user_name = self . env . user . name
now = fields . Datetime . now ( )
# Message pour la commande originale
original_msg_body = f " A new quotation <a href= ' # ' data-oe-model= ' sale.order ' data-oe-id= ' { new_order . id } ' ># { new_order . name } </a> created by { user_name } duplicating this Quotation. "
2024-09-30 16:24:15 -04:00
self . original_order_id . message_post ( body = original_msg_body , body_is_html = True )
2024-03-11 14:29:46 -04:00
# Message pour la nouvelle commande dupliquée
new_msg_body = f " This quotation has been created by { user_name } duplicating the original Quotation <a href= ' # ' data-oe-model= ' sale.order ' data-oe-id= ' { self . original_order_id . id } ' ># { self . original_order_id . name } </a>. "
2024-09-30 16:24:15 -04:00
new_order . message_post ( body = new_msg_body , body_is_html = True )
2024-03-11 14:29:46 -04:00
return {
2024-09-30 16:24:15 -04:00
" type " : " ir.actions.act_window " ,
" name " : " Duplicated Order " ,
" res_model " : " sale.order " ,
" res_id " : new_order . id ,
" view_mode " : " form " ,
" target " : " current " ,
2024-03-11 14:29:46 -04:00
}
2024-09-30 16:24:15 -04:00
@api.depends ( " original_order_id " )
2024-03-11 14:29:46 -04:00
def _compute_new_quot ( self ) :
for rec in self :
2024-09-30 16:24:15 -04:00
original_order_name = (
rec . original_order_id . name . split ( " - " ) [ 0 ]
if " - " in rec . original_order_id . name
else rec . original_order_id . name
)
other_quotes = self . env [ " sale.order " ] . search (
[ ( " name " , " like " , original_order_name + " % " ) ]
)
rec . new_quot = original_order_name + " -REV " + str ( len ( other_quotes ) )