revision ot v2

This commit is contained in:
amazuecos
2025-05-04 17:25:53 +02:00
parent db70c57fb3
commit fb7f2a28d9
30 changed files with 897 additions and 169 deletions

View File

@ -253,8 +253,7 @@ class PresupuestoService extends BaseService
$linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $linea['fields']['precios_pliegos'];
// Precio papel pedido
$linea['fields']['precio_pedido'] = $linea['fields']['precio_libro'] * ($datosPedido->tirada + $datosPedido->merma);
$linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);
;
$linea['fields']['margen_papel_pedido'] = $linea['fields']['pliegos_libro'] * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);;
$linea['fields']['a_favor_fibra'] = $parametrosRotativa->a_favor_fibra;
$linea['fields']['maquina'] = $maquina->maquina;
@ -615,9 +614,9 @@ class PresupuestoService extends BaseService
// precio tinta
$data['precio_tinta'] = round(
round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) +
round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2),
round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2),
2
);
@ -1907,8 +1906,8 @@ class PresupuestoService extends BaseService
$pedido = $modelPedido->find($pedido_id);
$serviceProduction->setPedido($pedido);
if (!$pedido->orden_trabajo()) {
$r = $serviceProduction->createOrdenTrabajo();
$r = $serviceProduction->createOrdenTrabajo(true);
$modelPedido->set(['estado' => 'produccion'])->where('id', $pedido_id)->update();
}
}
@ -1984,17 +1983,17 @@ class PresupuestoService extends BaseService
return $peso;
}
public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false){
public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false)
{
$precio_total_asignado = 0;
$precio_unidad_asignado = $precio_unidad;
$warning = false;
$model = model('App\Models\Presupuestos\PresupuestoModel');
if($precio_unidad != null && $unidades != null){
$model = model('App\Models\Presupuestos\PresupuestoModel');
if ($precio_unidad != null && $unidades != null) {
$precio_total_asignado = round(floatval($precio_unidad) * intval($unidades), 2);
}
else{
} else {
$precio_total_asignado = floatval($precio_total);
}
$presupuesto = $model->find($id);
@ -2003,13 +2002,12 @@ class PresupuestoService extends BaseService
$total_descuento = 0;
$total_descuentoPercent = 0;
if($costes + $envio_base > $precio_total_asignado){
if ($costes + $envio_base > $precio_total_asignado) {
if($forzar_descuento){
if ($forzar_descuento) {
$total_descuento = $costes + $envio_base - $precio_total_asignado;
$total_descuentoPercent = round($total_descuento / ($costes + $envio_base) * 100, 2);
}
else{
} else {
$precio_total_asignado = round($costes + $envio_base, 2);
$precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
}
@ -2021,22 +2019,22 @@ class PresupuestoService extends BaseService
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
$factor = ($precio_total_asignado - floatval($presupuesto->envio_base)
$factor = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactor;
$factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base)
$factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base)
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactorPonderado;
if ($presupuesto) {
$presupuesto->total_margenes = $total_margenes;
$presupuesto->total_margenes = $total_margenes;
$presupuesto->total_aceptado = $precio_total_asignado;
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
$presupuesto->total_presupuesto = $precio_total_asignado;
$presupuesto->total_antes_descuento = $precio_total_asignado - $costes - $envio_base < 0 ?
$costes + $envio_base :
$precio_total_asignado;
$costes + $envio_base :
$precio_total_asignado;
$presupuesto->total_precio_unidad = $precio_unidad_asignado;
$presupuesto->total_descuento = $total_descuento;
$presupuesto->total_descuentoPercent = $total_descuentoPercent;

View File

@ -52,6 +52,7 @@ class ProductionService extends BaseService
*/
public array $TIPOS_ROTATIVA = ['lp_rot_bn', 'lp_rot_color'];
public array $OT_TAREA_STATUS_TITLE;
protected OrdenTrabajoModel $otModel;
protected OrdenTrabajoTarea $otTarea;
@ -211,6 +212,14 @@ class ProductionService extends BaseService
$this->statusColor = $this->ordenTrabajoConfig->OT_COLORS["sin_imprimir"];
$this->configVariableModel = model(ConfigVariableModel::class);
$this->podValue = $this->configVariableModel->getVariable('POD')->value;
$this->OT_TAREA_STATUS_TITLE = [
"P" => lang('Produccion.tarea_estados.P'),
"F" => lang('Produccion.tarea_estados.F'),
"S" => lang('Produccion.tarea_estados.S'),
"I" => lang('Produccion.tarea_estados.I'),
"E" => lang('Produccion.tarea_estados.E'),
"D" => lang('Produccion.tarea_estados.D'),
];
}
public function init(int $orden_trabajo_id): self
@ -218,7 +227,11 @@ class ProductionService extends BaseService
try {
$this->maquinaModel = model(MaquinaModel::class);
$this->otModel = model(OrdenTrabajoModel::class);
$this->ot = $this->otModel->find($orden_trabajo_id);
$ot = $this->otModel->find($orden_trabajo_id);
if($ot == null){
throw new Exception(lang('Produccion.errors.ot_not_found',['ot_id' => $orden_trabajo_id]));
}
$this->ot = $ot;
$pedido = $this->ot->pedido();
$this->setPedido($pedido);
$this->defaultMaquinaCorte = $this->maquinaModel->where('nombre', $this->defaultMaquinaCorteName)->first();
@ -597,6 +610,12 @@ class ProductionService extends BaseService
}
return ["tareas" => $tareas];
}
public function getTareasWithMaquina(int $maquina_id,?array $tareaEstados = null) : ?array
{
return $this->otModel->queryMaquinaTareas($maquina_id, $tareaEstados)
->where('ordenes_trabajo.id', $this->ot->id)
->get()->getResult(OrdenTrabajoTareaEntity::class);
}
public function getPdf()
{
@ -994,9 +1013,9 @@ class ProductionService extends BaseService
$data["action_user_id"] = auth()->user()->id;
$lastDate = $this->otTareaProgressDate->where('ot_tarea_id', $data['ot_tarea_id'])->orderBy('action_at', 'DESC')->first();
if ($lastDate) {
if ($lastDate->estado == $data['estado']) {
throw new Exception(lang('Produccion.duplicate_estado_tarea_progress'));
}
// if ($lastDate->estado == $data['estado']) {
// throw new Exception(lang('Produccion.duplicate_estado_tarea_progress'));
// }
if ($lastDate->estado == 'F') {
throw new Exception(lang('Produccion.task_already_finished'));
}
@ -1907,7 +1926,9 @@ class ProductionService extends BaseService
"pedidos.fecha_impresion",
"orden_trabajo_tareas.nombre as tareaName",
"orden_trabajo_tareas.maquina_id",
"tarea_progress.estado as tareaEstado"
"tarea_progress.estado as tareaEstado",
"tarea_progress.estado",
])
->join("orden_trabajo_tareas", "orden_trabajo_tareas.orden_trabajo_id = ordenes_trabajo.id", "left")
//* Obtener el ultimo estado de la tarea
@ -1929,7 +1950,6 @@ class ProductionService extends BaseService
// ->where('pedidos.fecha_impresion IS NOT NULL', null, false) //! Dejar comentado por ahora
->where('ordenes_trabajo.preimpresion_revisada', true)
->where("orden_trabajo_tareas.deleted_at", null)
->where("tarea_progress.estado", 'P')
->orderBy("pedidos.fecha_impresion", "ASC")
->groupBy('orden_trabajo_tareas.id');
@ -2110,7 +2130,7 @@ class ProductionService extends BaseService
$data[$tareasAcabado->id] = 'plastificado_at';
}
if ($tarifaAcabado->rectractilado) {
$data[$tareasAcabado->id] = 'rectractilado_at';
$data[$tareasAcabado->id] = 'retractilado_at';
}
if ($tarifaAcabado->estampado) {
$data[$tareasAcabado->id] = 'estampado_at';
@ -2132,7 +2152,7 @@ class ProductionService extends BaseService
$dateName = 'plastificado_at';
}
if ($tarifaAcabado->rectractilado) {
$dateName = 'rectractilado_at';
$dateName = 'retractilado_at';
}
if ($tarifaAcabado->plakene) {
$dateName = 'plakene_at';
@ -2190,4 +2210,23 @@ class ProductionService extends BaseService
}
return $dateName;
}
public function getTitleTareaEstado($tarea_id): array
{
$estadoTitle = $this->OT_TAREA_STATUS_TITLE["P"];
$estadoColor = $this->ordenTrabajoConfig->OT_TAREA_STATUS_COLOR['P'];
$userName = null;
$progressDateEntity = $this->otTarea->find($tarea_id)->lastState();
if ($progressDateEntity) {
if (isset($this->OT_TAREA_STATUS_TITLE[$progressDateEntity->estado])) {
$estadoTitle = $this->OT_TAREA_STATUS_TITLE[$progressDateEntity->estado];
$estadoColor = $this->ordenTrabajoConfig->OT_TAREA_STATUS_COLOR[$progressDateEntity->estado];
$userName = $progressDateEntity->user()->fullName();
}
}
return [
"title" => $estadoTitle,
"color" => $estadoColor,
"userName" => $userName ?? "",
];
}
}