
    4Yj                     >    d Z ddlmZmZmZ d Zd ZddddddZd	 Zy
)zKCalculo de status de manutencao (OK / vencendo / vencido) por truck x item.    )datetime	timedeltatimezonec                 (    | ||y ||z   }|| z
  |fS N )currentbaselineintervalnext_dues       KD:\Nextcloud\SISTEMAS WINDOWS\frota-trucks-cliente\app\maintenance_logic.py
_remainingr      s.    (*h.>("Hgx''    c                    |
ddddddddS dx}}|j                   r2t        | j                  |j                  |j                         }|r|\  }}dx}}|j                  r2t        | j
                  |j                  |j                        }|r|\  }}dx}}	|j                  r|j                  }
|
j                   |
j                  t        j                        }
|
t        |j                        z   }	t        j                  t        j                        }|	|z
  j                   }t#        d |||fD              }|sd}n|duxr |dk  xs |duxr |dk  xs |duxr |dk  }|duxr d|cxk  xr |j$                  k  nc xsB |duxr d|cxk  xr |j&                  k  nc xs  |duxr d|cxk  xr |j(                  k  nc }|rd	}n|rd
}nd}|||||||	dS )z
    truck: instancia Truck (com odometer_miles, engine_hours)
    item: instancia MaintenanceItem (com interval_miles/hours/days e warnings)
    last_record: ultima MaintenanceRecord para esse truck+item, ou None
    Nsem_registro)statusremaining_milesremaining_hoursremaining_daysnext_due_milesnext_due_hoursnext_due_date)tzinfo)daysc              3   $   K   | ]  }|d u 
 y wr   r   ).0vs     r   	<genexpr>z&compute_item_status.<locals>.<genexpr>2   s     j7i!7is   sem_configuracaor   vencidovencendook)interval_milesr   odometer_milesmileage_at_serviceinterval_hoursengine_hourshours_at_serviceinterval_daysservice_dater   replacer   utcr   r   nowr   anywarning_mileswarning_hourswarning_days)truckitemlast_recordr   r   rr   r   r   r   r*   r-   dimensions_applicabler   
is_overdue
is_warnings                   r   compute_item_statusr9      s/    $##"""!
 	
 (,+Onu++[-K-KTM`M`a./+O^'++Onu));+G+GI\I\]./+O^%))N]"//&'//x||/DL$yd6H6H'IIll8<<('#-33jZh7ijj # D(@_q-@ Ct+C!0CCd*A~/A 	 D(WQ/-WTEWEW-W Yt+Z_0ZHZHZ0ZYd*WqN/WdFWFW/W 	
 FFF **(((& r            )r    r!   r   r   r"   c                 $    | syt        | d       S )Nr   c                 .    t         j                  | d      S )Nr   )STATUS_PRIORITYget)ss    r   <lambda>zworst_status.<locals>.<lambda>X   s    ':':1a'@r   )key)max)statusess    r   worst_statusrF   U   s    !x@AAr   N)__doc__r   r   r   r   r9   r?   rF   r   r   r   <module>rH      s4    Q 2 2(CL  QWX`abBr   