
    u'jI                     T    d dl Z d dlmZmZmZ d dlmZ  G d dej                  ZdS )    N)apifieldsmodels)	UserErrorc                   `    e Zd ZdZ ej        dd          Z ej        ddddd          Z ej        d	d
ddd          Z	 ej
        ddd          Z ej        ddd          Z ej        dddddd          Z ej        ddd          Z ej        ddd          Z ej        ddd          Z ej        d dd!          Z ej        d"dd#          Z ej        d$dd%          Z ej        d&dd'          Z ej        d(dd)          Z ej        d*d+dd,          Z ej        g d-d.d/dd0d12          Z ej        d3d4d0d5d67          Z ej
        d8dd9          Z ej        d:d;<          Z ej        d=          d>             Z  ej
        d?dd@          Z! ej
        dAddB          Z" ej#        dCdd0D          Z$ ej        dEdF          Z% ej        dG          Z& ej        dH          Z' ej        dI          Z( ej        dJdF          Z) ej        dK          Z* ej        dLdMN          Z+ ej        dOdMN          Z, ej        dPdQN          Z- ej        dRdMN          Z. ej        dSdMN          Z/ ej        dT          Z0 ej        dU          Z1 ej        dV          Z2 ej3        dW          Z4 ej#        dXdY          Z5 ej#        dZd[          Z6 ej#        d\d]          Z7 ej#        d^d_          Z8 ej#        d`da          Z9 ej#        ddb          Z: ej        dc          dd             Z; ej        de          df             Z< ej        dg          dh             Z= ej        di          dj             Z> ej        dk          dl             Z? ej        dmdn          do             Z@dp ZAdq ZBdr ZCds ZDdt ZEdu ZFdv ZGdw ZHdx ZIdy ZJdz ZKd{ ZLd| ZMd} ZNd~ ZOd ZPd ZQd ZRd ZSejT         fd            ZUd ZV fdZW xZXS )RepairOrderzrepair.order
sale.orderzPresupuesto Principal)stringrepair_order_sale_order_relrepair_order_idsale_order_idPresupuestospurchase.orderrepair_order_purchase_order_relpurchase_order_idzPedidos de Comprastock.picking	Albaranesaccount.move_compute_invoice_idsFacturas)computer
   relsum.machineu   MáquinarestrictTu@   Máquina del cliente. Permite trazabilidad histórica entre OTs.)r
   ondeleteindextrackinghelpzrelsum_machine_id.marcau   Marca (de la máquina))relatedreadonlyr
   zrelsum_machine_id.tipou   Tipo (de la máquina)zrelsum_machine_id.numero_serieu   Nº serie (de la máquina)zrelsum_machine_id.kvau   kVA (de la máquina)zrelsum_machine_id.voltiosu   Voltios (de la máquina)zrelsum_machine_id.rpmu   RPM (de la máquina)zrelsum_machine_id.amperiosu   Amperios (de la máquina)zrelsum_machine_id.hzu   Hz (de la máquina)zres.partnerzrelsum_machine_id.planta_idu   Planta (de la máquina)))receivedRecibida)
diagnosticu   En diagnóstico)quotedPresupuestada)in_progressu   En reparación)readyzLista para entrega)	delivered	Entregada)invoiced	FacturadaFaser    FzEFase del procedimiento RELSUM. Avanza con los botones del encabezado.)	selectionr
   defaultr   copyr   account.analytic.accountu   Cuenta analíticaz"analytic.group_analytic_accountingui   Se crea automáticamente al crear la OT. Sólo visible para usuarios del grupo "Contabilidad analítica".)r
   r.   groupsr   zaccount.analytic.linezPartes de trabajozHoras totales_compute_timesheet_hours)r
   r   ztimesheet_ids.unit_amountc                 h    | D ].}t          |j                            d                    |_        /d S )Nunit_amount)sumtimesheet_idsmappedtimesheet_hoursselfrecs     8/opt/odoo/custom_addons/ot_relsum/models/repair_order.pyr1   z$RepairOrder._compute_timesheet_hours   sC     	O 	OC"%c&7&>&>}&M&M"N"NC	O 	O    relsum.technical.report   Informes técnicosrelsum.petty.cash.refCajas RHu   Nº OT (legacy))r
   r   r.   u   Nº Presupuesto)r
   r   u   Nº Pedido ClienteMarcazTipo / Modelou	   Nº SeriePlantazVoltios (V))
      )r
   digitszPotencia (kVA)RPM)rC   r   zAmperios (A)zFrecuencia (Hz)u   Nº Albarán (texto legacy)u   Nota Albaránz#Pedido a Proveedores (texto legacy)Comentarios_compute_sale_order_countu   Nº de presupuestos_compute_purchase_order_countu   Nº de compras_compute_picking_countu   Nº de albaranes_compute_technical_report_countu   Nº de informes_compute_petty_cash_ref_countu   Nº de cajasu   Nº de facturassale_order_idsc                 B    | D ]}t          |j                  |_        d S N)lenrM   sale_order_countr8   s     r;   rH   z%RepairOrder._compute_sale_order_count   s1     	; 	;C#&s'9#:#:C  	; 	;r<   purchase_order_idsc                 B    | D ]}t          |j                  |_        d S rO   )rP   rR   purchase_order_countr8   s     r;   rI   z)RepairOrder._compute_purchase_order_count   5     	C 	CC'*3+A'B'BC$$	C 	Cr<   picking_idsc                 B    | D ]}t          |j                  |_        d S rO   )rP   rV   picking_countr8   s     r;   rJ   z"RepairOrder._compute_picking_count   s0     	5 	5C #CO 4 4C	5 	5r<   technical_report_idsc                 B    | D ]}t          |j                  |_        d S rO   )rP   rY   technical_report_countr8   s     r;   rK   z+RepairOrder._compute_technical_report_count   s5     	G 	GC),S-E)F)FC&&	G 	Gr<   petty_cash_ref_idsc                 B    | D ]}t          |j                  |_        d S rO   )rP   r\   petty_cash_ref_countr8   s     r;   rL   z)RepairOrder._compute_petty_cash_ref_count   rU   r<   zsale_order_ids.invoice_idszsale_order_id.invoice_idsc                     | D ]c}|j                             d          }|j        r||j        j        z  }|                    d           }||_        t          |          |_        dd S )Ninvoice_idsc                     | j         dv S )N)out_invoice
out_refund)	move_type)ms    r;   <lambda>z2RepairOrder._compute_invoice_ids.<locals>.<lambda>   s    Q[<Y-Y r<   )rM   r6   r   r`   filteredrP   invoice_count)r9   r:   movess      r;   r   z RepairOrder._compute_invoice_ids   sy     	+ 	+C&--m<<E  7*66NN#Y#YZZE#CO #E

C	+ 	+r<   c                 |    |                                   dddddd| j        j        fg| j        j        | j        ddS )	Nir.actions.act_windowr   	list,formr	   idin)default_partner_iddefault_repair_order_idtypename	view_mode	res_modeldomaincontext)
ensure_onerM   ids
partner_idrm   r9   s    r;   action_view_sale_ordersz#RepairOrder.action_view_sale_orders   sW    +"$%dD$7$;<=&*o&8+/7 

 

 
	
r<   c                 V    |                                   dddddd| j        j        fgdS )Nrk   zPedidos a Proveedorrl   r   rm   rn   rr   rs   rt   ru   rv   )rx   rR   ry   r{   s    r;   action_view_purchase_ordersz'RepairOrder.action_view_purchase_orders   s@    +)$)dD$;$?@A
 
 	
r<   c                 V    |                                   dddddd| j        j        fgdS )Nrk   r   rl   r   rm   rn   r~   )rx   rV   ry   r{   s    r;   action_view_pickingsz RepairOrder.action_view_pickings   s@    +$(dD$4$89:
 
 	
r<   c                 f    |                                   dddddd| j        j        fgd| j        idS )	Nrk   r>   rl   r=   rm   rn   rp   rq   )rx   rY   ry   rm   r{   s    r;   action_view_technical_reportsz)RepairOrder.action_view_technical_reports   sJ    +($2dD$=$ABC147;
 
 	
r<   c                 f    |                                   dddddd| j        j        fgd| j        idS )	Nrk   r@   rl   r?   rm   rn   rp   rq   )rx   r\   ry   rm   r{   s    r;   action_view_petty_cashz"RepairOrder.action_view_petty_cash	  sJ    +$0dD$;$?@A147;
 
 	
r<   c                 V    |                                   dddddd| j        j        fgdS )Nrk   r   rl   r   rm   rn   r~   )rx   r`   ry   r{   s    r;   action_view_invoicesz RepairOrder.action_view_invoices  s@    +$'dD$4$89:
 
 	
r<   c                    |                                   | j        r |                     d| j        j                  S | j        d                             | j        j        | j        pd| j        pd| j	        pd| j
        pd| j        pd| j        pd| j        pd| j        pdd	          }|j        | _        |                     d|j                  S )u   Crea una máquina pre-rellenada con los datos legacy de la OT
        y la asocia al campo relsum_machine_id. Si ya existe, abre la
        existente.r   Fr   )	rz   marcatiponumero_serievoltioskvarpmamperioshz)rx   relsum_machine_id_open_recordrm   envcreaterz   x_marcax_tipo_maquinax_numero_serie	x_voltiosx_kvax_rpm
x_amperiosx_hz)r9   machines     r;   action_create_machinez!RepairOrder.action_create_machine"  s     	! 	R$$%5t7M7PQQQ(+,33/,\*U'05 /85~*:?:?,1).q
5
 
5
 
 
 ")  !17:>>>r<   c                 (   |                                   | j        d                             | j        j        | j        d          }d|j        fg| _        | j        s|j        | _        | j        dv rd| _        |                     d|j                  S )z<Crea un sale.order pre-rellenado con cliente + OT y lo abre.r	   )rz   r      )r    r"   r#   )	rx   r   r   rz   rm   rM   r   relsum_workflow_stager   )r9   sales     r;   action_create_salezRepairOrder.action_create_sale8  s    x%,,/,#w.
 .
   !"47|n! 	)!%D%)CCC)1D&  tw777r<   c           	      T    |                                   dddddddd| j        gfgid	S )
z=Abre el formulario de purchase.order con la OT pre-vinculada.rk   zNuevo pedido a proveedorr   formcurrentdefault_repair_order_ids   r   rr   rs   ru   rt   targetrw   )rx   rm   r{   s    r;   action_create_purchasez"RepairOrder.action_create_purchaseG  sH    +.)*aTWI->,?	
 	
 		
r<   c           
      (   |                                   | j        d                             ddd| j        j        j        fgd          p"| j        d                             dgd          }ddd	d
d| j        j        |r|j        nd| j        dddS )z8Abre formulario de stock.picking outgoing pre-rellenado.zstock.picking.type)code=outgoingzwarehouse_id.company_idr      limitrk   u   Nuevo albaránr   r   r   Frepair)ro   default_picking_type_idrp   default_tipo_albaranr   )rx   r   searchcompanyrm   rz   )r9   pt_outs     r;   action_create_pickingz!RepairOrder.action_create_pickingU  s    ./66%&TX-=-@A8
  7   c x 45<<>W=X`a<bb 	
 ,$(&*o&88>+I699E+/7(0	 
 
 	
r<   c                    |                                   | j        }|s%| j                            d           }|dd         }|st	          d          |j        dk    r t	          d|j        d|j        d          |                                }|st	          d	          | j        d
v rd| _        | 	                    d|d         j
                  S )zAGenera factura desde el presupuesto confirmado vinculado a la OT.c                     | j         dk    S )Nr   )state)ss    r;   rf   z3RepairOrder.action_create_invoice.<locals>.<lambda>o  s    qw&?P r<   Nr   z'Esta OT no tiene presupuesto vinculado.r   zEl presupuesto u    no está confirmado (estado=u   ). Confírmalo primero.u7   No se generaron facturas (¿ya estaba todo facturado?).)r&   r'   r)   r   r   )rx   r   rM   rg   r   r   rs   _create_invoicesr   r   rm   )r9   r   	confirmedinvoicess       r;   action_create_invoicez!RepairOrder.action_create_invoicej  s    ! 	!+445P5PQQIRaR=D 	GEFFF:)*.)))TZZZA   ((** 	WUVVV%)???)3D&  !@@@r<   c                     d|d|ddS )Nrk   r   r   )rr   ru   rt   res_idr    )r9   modelr   s      r;   r   zRepairOrder._open_record  s     +
 
 	
r<   c                 4    |                      ddi           d S )Nr   r    writer{   s    r;   action_stage_receivedz!RepairOrder.action_stage_received       

+Z899999r<   c                 4    |                      ddi           d S )Nr   r"   r   r{   s    r;   action_stage_diagnosticz#RepairOrder.action_stage_diagnostic  s     

+\:;;;;;r<   c                 4    |                      ddi           d S )Nr   r#   r   r{   s    r;   action_stage_quotedzRepairOrder.action_stage_quoted  s     

+X677777r<   c                 4    |                      ddi           d S )Nr   r%   r   r{   s    r;   action_stage_in_progressz$RepairOrder.action_stage_in_progress  s     

+];<<<<<r<   c                 4    |                      ddi           d S )Nr   r&   r   r{   s    r;   action_stage_readyzRepairOrder.action_stage_ready  s     

+W566666r<   c                 4    |                      ddi           d S )Nr   r'   r   r{   s    r;   action_stage_deliveredz"RepairOrder.action_stage_delivered  s     

+[9:::::r<   c                 4    |                      ddi           d S )Nr   r)   r   r{   s    r;   action_stage_invoicedz!RepairOrder.action_stage_invoiced  r   r<   c                    |D ]W}|                     d          r|                     d          dk    r'| j        d                             d          }|r||d<   Xt                                          |          }| j        d                                                             g d          }|r| j        d                                         }|D ]}|                                j        s{|j        pd	d
|j	        j        pd|j
        d}|j	        r|j	        j
        |d<   |                    |          }	|                                                    d|	j
        i           |S )Nrs   /ir.sequencerepair.order.otzaccount.analytic.planr   r   r/   z(OT sin nombre)z - zsin cliente)rs   plan_idrz   analytic_account_id)getr   next_by_codesuperr   sudor   r   rs   rz   rm   r   )r9   	vals_listvalsseqrecordsplanAAraa_valsaa	__class__s             r;   r   zRepairOrder.create  s    	' 	'D88F## 'txx'7'73'>'>h}-::;LMM '#&DL''..++ x/05577>>r>KK 	C45::<<B C Cvvxx3 C F7&777L->>! $(7 G | @01-7++BFFHHNN$925#ABBBr<   c                     |                                   | j        rPt          j        d| j                                                  }|r"t          |                    d                    S dS )u   Nº correlativo si el name sigue el patrón de la secuencia (OT-NNNNN).
        Devuelve int o False (las OTs legacy 'WH/RO/...' no cuentan).z^OT-0*(\d+)$r   F)rx   rs   rematchstripintgroup)r9   re   s     r;   _ot_sequence_numberzRepairOrder._ot_sequence_number  s^     	9 	'$)//*;*;<<A '1771::&ur<   c                 f   d d | D             D             }t                                                      }|rw| j        d                                                             dgd          }|r@|                    dg           |j        }|}|dz
  }||v r|}|dz  }||v ||k     r||_        |S )Nc                     h | ]}||S r   r   ).0ns     r;   	<setcomp>z%RepairOrder.unlink.<locals>.<setcomp>  s-     
 
 
a

 
 
r<   c              3   >   K   | ]}|                                 V  d S rO   )r   )r   r:   s     r;   	<genexpr>z%RepairOrder.unlink.<locals>.<genexpr>  s.      BBc//11BBBBBBr<   r   )r   r   r   r   r   number_next_actual)r   unlinkr   r   r   invalidate_recordsetr   )r9   deleted_numsresr   next_actualrollback_tocurr   s          r;   r   zRepairOrder.unlink  s    
 
BBTBBB
 
 
 ggnn 	9(=)..007712! 8  C  9 ((*>)?@@@!4
 *!Ao\))"%K1HC \)) ,,-8C*
r<   )Y__name__
__module____qualname___inheritr   Many2oner   	Many2manyrM   rR   One2manyrV   r`   r   Charmachine_marcamachine_tipomachine_numero_serieFloatmachine_kvamachine_voltiosmachine_rpmmachine_amperios
machine_hzmachine_planta_id	Selectionr   r   r5   r7   r   dependsr1   rY   r\   Integerx_numero_otx_presupuestox_numero_pedidor   r   r   x_plantar   r   r   r   r   	x_albaranx_albaran_notax_pedido_proveedorTextx_comentariosrQ   rT   rX   r[   r^   rh   rH   rI   rJ   rK   rL   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   model_create_multir   r   r   __classcell__)r   s   @r;   r   r      s       H $FO&  M
 &V%%  N *))"   "&/  K #&"&  K (O    FK(ADYqrrrM6;'?$WnoooL&6;/OZ^  hD  E  E  E&,'>VlmmmK"fl+FQU^xyyyO&,'>VlmmmK#v|,HSW`{|||&<tTijjjJ'?\gk  uN  O  O  O -F,
 
 
 T  * *&/""3P   $FO"  M
 #fl*  O
 S[,--O O .-O +6?!#   )   !&.(9ERRRKFK'8EEEM!fk)=>>>Ofk)))G V[888N V[4@@@Nv{(+++HM'BBBIFL 0AAAEFLg666E^GDDDJ6<0AAAD#@AAAI V[888N$,QRRRFK}555M &v~.IRghhh)6>2QZjkkk"FN+CL^___M+V^4U^oppp)6>2QZhiii"FN+AJ[\\\MS[!""; ; #"; S[%&&C C '&C S[5 5  5 S['((G G )(G S[%&&C C '&C S[-/JKK+ + LK+
 
 

 
 

 
 
	
 	
 	
	
 	
 	

 
 
? ? ?,8 8 8
 
 

 
 
*A A A,
 
 
: : :< < <8 8 8= = =7 7 7; ; ;: : : 	    F          r<   r   )	r   odoor   r   r   odoo.exceptionsr   Modelr   r   r<   r;   <module>r$     s~    				 $ $ $ $ $ $ $ $ $ $ % % % % % %g g g g g&, g g g g gr<   