mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'dev/actualizar_presupuesto' into 'main'
Dev/actualizar presupuesto See merge request jjimenez/safekat!197
This commit is contained in:
@ -102,6 +102,10 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
$sanitizedData['papel_formato_id'] = 0;
|
||||
}
|
||||
|
||||
if (!isset($sanitizedData['is_duplicado']) || $sanitizedData['is_duplicado'] == null) {
|
||||
$sanitizedData['is_duplicado'] = 0;
|
||||
}
|
||||
|
||||
$noException = true;
|
||||
if ($successfulResult = $this->canValidate($this->model->validationRulesAdd, $this->model->validationMessagesAdd)) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
|
||||
|
||||
@ -191,10 +195,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
|
||||
|
||||
|
||||
// JJO
|
||||
$sanitizedData['user_updated_id'] = $session->id_user;
|
||||
|
||||
if ($this->request->getPost('is_duplicado') == null) {
|
||||
$sanitizedData['is_duplicado'] = 0;
|
||||
}
|
||||
|
||||
if ($this->request->getPost('retractilado') == null) {
|
||||
$sanitizedData['retractilado'] = false;
|
||||
}
|
||||
@ -339,28 +346,33 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
$this->viewData['papelGenericoRotativaNegroList'] = $this->getPapelGenericoRotativaNegro();
|
||||
$this->viewData['papelGenericoRotativaColorList'] = $this->getPapelGenericoRotativaColor();
|
||||
|
||||
$this->viewData['direccionesList'] = $this->getDirecciones($id);
|
||||
|
||||
// Acabados exteriores
|
||||
$this->viewData['acabadosCubierta'] = $this->getAcabadosCubierta();
|
||||
$this->viewData['acabadosSobrecubierta'] = $this->getAcabadosSobrecubierta();
|
||||
|
||||
// Lineas Presupuesto
|
||||
$this->viewData['lineasPresupuesto'] = (new PresupuestoLineaModel())->getLineasPresupuesto($id);
|
||||
[$cambios_lineas, $this->viewData['lineasPresupuesto']] = $this->getLineasPresupuesto($presupuestoEntity);
|
||||
$this->viewData['presupuestoEntity']->cambios_lineas=$cambios_lineas;
|
||||
|
||||
// Tarifas
|
||||
$this->viewData['serviciosAcabado'] = $this->getServiciosAcabado();
|
||||
// Servicios
|
||||
$this->viewData['serviciosPreimpresion'] = $this->getServiciosPreimpresion();
|
||||
$this->viewData['serviciosPreimpresion'] = $this->getServiciosPreimpresion();
|
||||
$this->viewData['serviciosEncuadernacion'] = $this->getServiciosEncuadernacion();
|
||||
$this->viewData['serviciosManipulado'] = $this->getServiciosManipulado();
|
||||
$this->viewData['serviciosEncuadernacionList'] = (new PresupuestoEncuadernacionesModel())->getResource($id)->get()->getResultObject();
|
||||
$this->viewData['serviciosAcabadosList'] = (new PresupuestoAcabadosModel())->getResource($id)->get()->getResultObject();
|
||||
$this->viewData['serviciosManipuladoList'] = (new PresupuestoManipuladosModel())->getResource($id)->get()->getResultObject();
|
||||
$this->viewData['serviciosPreimpresionList'] = (new PresupuestoPreimpresionesModel())->getResource($id)->get()->getResultObject();
|
||||
$this->viewData['serviciosAcabado'] = $this->getServiciosAcabado();
|
||||
|
||||
[$cambios_en_servicios, $servicios] = $this->getLineasServicios($presupuestoEntity);
|
||||
$this->viewData['presupuestoEntity']->cambios_servicios=$cambios_en_servicios;
|
||||
|
||||
$this->viewData['serviciosEncuadernacionList'] = $servicios->serviciosEncuadernacion;
|
||||
$this->viewData['serviciosAcabadosList'] = $servicios->serviciosAcabado;
|
||||
$this->viewData['serviciosManipuladoList'] = $servicios->serviciosManipulado;
|
||||
$this->viewData['serviciosPreimpresionList'] = $servicios->serviciosPreimpresion;
|
||||
|
||||
// Direciones presupuesto
|
||||
$this->viewData['presupuestoDirecciones'] = (new PresupuestoDireccionesModel())->getResource("", $id)->get()->getResultObject();
|
||||
|
||||
[$cambios_en_direcciones, $this->viewData['direccionesList']] = $this->getLineasDirecciones($presupuestoEntity);
|
||||
$this->viewData['presupuestoEntity']->cambios_direcciones=$cambios_en_direcciones;
|
||||
|
||||
$this->viewData['POD'] = $this->getPOD();
|
||||
|
||||
$this->viewData['serviciosAutomaticos'] = [
|
||||
@ -378,8 +390,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$this->viewData['formAction'] = route_to('updateCosidotapablanda', $id);
|
||||
|
||||
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.edit3');
|
||||
// Si se ha llamado a esta funcion porque se ha duplicado el presupuesto
|
||||
// se actualiza la bbdd para que sólo ejecute algunas funciones una vez
|
||||
if($presupuestoEntity->is_duplicado){
|
||||
$this->model->removeIsDuplicado($presupuestoEntity->id);
|
||||
}
|
||||
|
||||
$this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.edit3');
|
||||
|
||||
return $this->displayForm(__METHOD__, $id);
|
||||
} // end function edit(...)
|
||||
@ -524,6 +541,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
$item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100);
|
||||
endif;
|
||||
endforeach;
|
||||
|
||||
} else {
|
||||
|
||||
$isColor = $reqData['color'] ?? false;
|
||||
@ -548,7 +566,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$cliente_id = $reqData['cliente_id'] ?? -1;
|
||||
|
||||
|
||||
$resourceData = [];
|
||||
|
||||
if ($type == 'interior' || $type == 'guardas') {
|
||||
|
||||
@ -568,6 +586,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
}
|
||||
|
||||
if ($type == 'guardas') {
|
||||
|
||||
$datosPedido->paginas_impresion = intval($reqData['paginas_impresion']) ?? 0;
|
||||
// Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
|
||||
// y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
|
||||
@ -581,16 +600,21 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$a_favor_fibra = $reqData['a_favor_fibra'] ?? false;
|
||||
|
||||
$resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id, $datosTipolog, $a_favor_fibra);
|
||||
$input_data = array(
|
||||
'uso' => $type,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => $isColor,
|
||||
'isHq' => $isHq,
|
||||
'cliente_id' => $cliente_id,
|
||||
'datosTipolog' => $datosTipolog,
|
||||
'a_favor_fibra' => $a_favor_fibra
|
||||
);
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
$data = [
|
||||
'lineas' => $resourceData,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
|
||||
|
||||
return $this->respond($data);
|
||||
} else if ($type == 'interior_rot') {
|
||||
|
||||
$paginas = (object)array(
|
||||
@ -612,36 +636,45 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
array_push($datosTipolog, $data);
|
||||
}
|
||||
|
||||
$resourceData = $this->getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog);
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
$data = [
|
||||
'lineas' => $resourceData,
|
||||
$csrfTokenName => $newTokenHash
|
||||
$input_data = [
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'paginas' => $paginas,
|
||||
'cliente_id' => $cliente_id,
|
||||
'datosTipolog' => $datosTipolog
|
||||
];
|
||||
|
||||
$resourceData = PresupuestoService::obtenerComparadorRotativa($input_data);
|
||||
|
||||
return $this->respond($data);
|
||||
} else if ($type == 'cubierta' || $type == 'sobrecubierta') {
|
||||
|
||||
$datosPedido->solapas = $reqData['solapas'];
|
||||
$datosPedido->solapas_ancho = $reqData['solapas_ancho'];
|
||||
$datosPedido->lomo = $reqData['lomo'];
|
||||
|
||||
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
|
||||
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($type, $tipo_impresion_id, $datosPedido);
|
||||
// Cubierta y sobrecubierta siempre color HQ
|
||||
$resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, 1, $cliente_id);
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
$data = [
|
||||
'lineas' => $resourceData,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
|
||||
return $this->respond($data);
|
||||
$input_data = array(
|
||||
'uso' => $type,
|
||||
'tipo_impresion_id' => $tipo_impresion_id,
|
||||
'datosPedido' => $datosPedido,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $gramaje,
|
||||
'isColor' => 1, // Cubierta y sobrecubierta siempre color HQ
|
||||
'isHq' => 1,
|
||||
'cliente_id' => $cliente_id,
|
||||
);
|
||||
|
||||
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
|
||||
}
|
||||
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
$data = [
|
||||
'lineas' => $resourceData,
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
|
||||
return $this->respond($data);
|
||||
}
|
||||
|
||||
return $this->respond(Collection::datatable(
|
||||
@ -809,215 +842,75 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
return $viewData;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function getCompIntData($uso, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id, $datosTipolog = null, $a_favor_fibra = false)
|
||||
{
|
||||
$tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
|
||||
|
||||
$opciones_papel = PresupuestoService::get_opciones_papel($uso, $isColor);
|
||||
|
||||
// Se obtienen los papeles disponibles
|
||||
$papelimpresionmodel = new PapelImpresionModel();
|
||||
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
|
||||
papel_generico_id: $papel_generico['id'],
|
||||
gramaje: $gramaje,
|
||||
options: $opciones_papel
|
||||
);
|
||||
|
||||
$lineas = array();
|
||||
// Para cada papel, se obtienen las maquinas disponibles
|
||||
foreach ($papeles as $papel) {
|
||||
|
||||
$maquinamodel = new MaquinaModel();
|
||||
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
|
||||
is_rotativa: 0,
|
||||
tarifa_tipo: $tipo,
|
||||
uso_tarifa: ($uso == 'guardas') ? 'interior' : $uso,
|
||||
tirada: $datosPedido->tirada + $datosPedido->merma,
|
||||
papel_impresion_id: $papel->id,
|
||||
);
|
||||
|
||||
// Se recorren las máquinas y se calcula el coste de linea por cada una
|
||||
foreach ($maquinas as $maquina) {
|
||||
|
||||
|
||||
$data['uso'] = $uso;
|
||||
$data['tipo'] = $tipo;
|
||||
$data['datosPedido'] = $datosPedido;
|
||||
$data['cliente_id'] = $cliente_id;
|
||||
$data['papel'] = $papel;
|
||||
$data['opciones_papel'] = $opciones_papel;
|
||||
$data['maquina'] = $maquina;
|
||||
$data['papel_generico'] = $papel_generico;
|
||||
$data['isColor'] = $isColor;
|
||||
$data['a_favor_fibra'] = $a_favor_fibra;
|
||||
$data['datosTipolog'] = $datosTipolog;
|
||||
$data['gramaje'] = $gramaje;
|
||||
|
||||
$linea = PresupuestoService::getLineaPresupuestoPlana($data);
|
||||
|
||||
if(empty($linea))
|
||||
continue;
|
||||
|
||||
array_push($lineas, $linea);
|
||||
}
|
||||
}
|
||||
return $lineas;
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplica un presupuesto dado por su ID.
|
||||
*
|
||||
* Esta función duplica un presupuesto y todas sus entidades relacionadas como acabados, encuadernaciones, manipulados,
|
||||
* preimpresiones, direcciones y lineas. El presupuesto duplicado se marca como tal y a su título se le añade
|
||||
* una cadena 'duplicado'. La función devuelve un array con un estado de éxito y el ID del nuevo presupuesto.
|
||||
*
|
||||
* @param int $id El ID del presupuesto a duplicar.
|
||||
* @return array Un array asociativo que contiene una clave 'success' que indica el estado de éxito de la operación,
|
||||
* y una clave 'id' que contiene el ID del nuevo presupuesto si la operación fue exitosa.
|
||||
* Si ocurre una excepción, la clave 'success' será false y una clave 'message' contendrá el mensaje de la excepción.
|
||||
* @throws \Exception Si ocurre un error durante la operación.
|
||||
*/
|
||||
private function duplicarPresupuesto($id){
|
||||
|
||||
try{
|
||||
|
||||
$presupuesto = $this->model->find($id);
|
||||
$presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado');
|
||||
$new_id = $this->model->insert($presupuesto);
|
||||
|
||||
$presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||
foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) {
|
||||
$acabado->presupuesto_id = $new_id;
|
||||
$presupuestoAcabadosModel->insert($acabado);
|
||||
}
|
||||
|
||||
$presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
|
||||
foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) {
|
||||
$encuadernacion->presupuesto_id = $new_id;
|
||||
$presupuestoEncuadernacionesModel->insert($encuadernacion);
|
||||
}
|
||||
|
||||
$presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
|
||||
foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) {
|
||||
$manipulado->presupuesto_id = $new_id;
|
||||
$presupuestoManipuladosModel->insert($manipulado);
|
||||
}
|
||||
|
||||
$presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel');
|
||||
foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) {
|
||||
$preimpresion->presupuesto_id = $new_id;
|
||||
$presupuestoPreimpresionesModel->insert($preimpresion);
|
||||
}
|
||||
|
||||
$presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
|
||||
foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) {
|
||||
$direccion->presupuesto_id = $new_id;
|
||||
$presupuestoDireccionesModel->insert($direccion);
|
||||
}
|
||||
|
||||
$presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel');
|
||||
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'id' => $new_id
|
||||
];
|
||||
|
||||
}catch(\Exception $e){
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private function getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog = null)
|
||||
{
|
||||
$uso = 'interior';
|
||||
|
||||
$tipo = $paginas->color > 0 ? 'color' : 'negro';
|
||||
|
||||
|
||||
$parametrosRotativa = (object)array(
|
||||
'a_favor_fibra' => $datosPedido->a_favor_fibra,
|
||||
'bnPages' => $paginas->negro,
|
||||
'colorPages' => $paginas->color,
|
||||
'rotativa_gota_negro' => 0,
|
||||
'rotativa_gota_color' => 0,
|
||||
);
|
||||
|
||||
$opciones_papel = array(
|
||||
'rotativa' => 1,
|
||||
);
|
||||
|
||||
$tipo = array();
|
||||
if ($paginas->color > 0) {
|
||||
$tipo = 'color';
|
||||
$opciones_papel['color'] = 1;
|
||||
}
|
||||
else {
|
||||
$opciones_papel['bn'] = 1;
|
||||
$tipo = 'negro';
|
||||
}
|
||||
|
||||
// Se obtienen los papeles disponibles
|
||||
$papelimpresionmodel = new PapelImpresionModel();
|
||||
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
|
||||
papel_generico_id: $papel_generico['id'],
|
||||
gramaje: $gramaje,
|
||||
options: $opciones_papel
|
||||
);
|
||||
|
||||
$lineas = array();
|
||||
// Para cada papel, se obtienen las maquinas disponibles
|
||||
foreach ($papeles as $papel) {
|
||||
|
||||
$papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel();
|
||||
if (is_null($datosTipolog)) {
|
||||
$datosTipologias = $papelImpresionTipologiaModel
|
||||
->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages > 0 ? 'color' : 'negro')
|
||||
->get()->getResultObject();
|
||||
|
||||
|
||||
if (count($datosTipologias) == 0) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$datosTipologias = $datosTipolog;
|
||||
}
|
||||
|
||||
$parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro;
|
||||
$parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color;
|
||||
$parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro;
|
||||
$parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan;
|
||||
$parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta;
|
||||
$parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo;
|
||||
|
||||
$maquinamodel = new MaquinaModel();
|
||||
|
||||
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
|
||||
is_rotativa: 1,
|
||||
tarifa_tipo: $tipo,
|
||||
uso_tarifa: $uso,
|
||||
tirada: $datosPedido->tirada + $datosPedido->merma,
|
||||
papel_impresion_id: $papel->id,
|
||||
);
|
||||
|
||||
// Se recorren las máquinas y se calcula el coste de linea por cada una
|
||||
foreach ($maquinas as $maquina) {
|
||||
|
||||
$data['uso'] = $uso;
|
||||
$data['tipo'] = $tipo;
|
||||
$data['datosPedido'] = $datosPedido;
|
||||
$data['cliente_id'] = $cliente_id;
|
||||
$data['papel'] = $papel;
|
||||
$data['maquina'] = $maquina;
|
||||
$data['papel_generico'] = $papel_generico;
|
||||
$data['parametrosRotativa'] = $parametrosRotativa;
|
||||
$data['paginas'] = $paginas;
|
||||
$data['gramaje'] = $gramaje;
|
||||
|
||||
$linea = PresupuestoService::getLineaPresupuestoRotativa($data);
|
||||
|
||||
if(empty($linea))
|
||||
continue;
|
||||
|
||||
array_push($lineas, $linea);
|
||||
}
|
||||
}
|
||||
return $lineas;
|
||||
}
|
||||
try{
|
||||
|
||||
$presupuesto = $this->model->find($id);
|
||||
$presupuesto->titulo = $presupuesto->titulo .' - ' . lang('Presupuestos.duplicado');
|
||||
$presupuesto->is_duplicado = 1;
|
||||
$new_id = $this->model->insert($presupuesto);
|
||||
|
||||
$presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||
foreach ($presupuestoAcabadosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $acabado) {
|
||||
$acabado->presupuesto_id = $new_id;
|
||||
$presupuestoAcabadosModel->insert($acabado);
|
||||
}
|
||||
|
||||
$presupuestoEncuadernacionesModel = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
|
||||
foreach ($presupuestoEncuadernacionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $encuadernacion) {
|
||||
$encuadernacion->presupuesto_id = $new_id;
|
||||
$presupuestoEncuadernacionesModel->insert($encuadernacion);
|
||||
}
|
||||
|
||||
$presupuestoManipuladosModel = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
|
||||
foreach ($presupuestoManipuladosModel->where('presupuesto_id', $presupuesto->id)->findAll() as $manipulado) {
|
||||
$manipulado->presupuesto_id = $new_id;
|
||||
$presupuestoManipuladosModel->insert($manipulado);
|
||||
}
|
||||
|
||||
$presupuestoPreimpresionesModel = model('App\Models\Presupuestos\PresupuestoPreimpresionesModel');
|
||||
foreach ($presupuestoPreimpresionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $preimpresion) {
|
||||
$preimpresion->presupuesto_id = $new_id;
|
||||
$presupuestoPreimpresionesModel->insert($preimpresion);
|
||||
}
|
||||
|
||||
$presupuestoDireccionesModel = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
|
||||
foreach ($presupuestoDireccionesModel->where('presupuesto_id', $presupuesto->id)->findAll() as $direccion) {
|
||||
$direccion->presupuesto_id = $new_id;
|
||||
$presupuestoDireccionesModel->insert($direccion);
|
||||
}
|
||||
|
||||
$presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel');
|
||||
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
'id' => $new_id
|
||||
];
|
||||
|
||||
}catch(\Exception $e){
|
||||
return [
|
||||
'success' => false,
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public function allItemsSelect()
|
||||
{
|
||||
@ -1186,8 +1079,6 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
protected function getPapelGenericoRotativaNegro()
|
||||
{
|
||||
$model = model('App\Models\Configuracion\PapelGenericoModel');
|
||||
@ -1338,8 +1229,57 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
return $model->getPOD();
|
||||
}
|
||||
|
||||
protected function getDirecciones($presupuesto_id){
|
||||
protected function getLineasPresupuesto($presupuestoEntity){
|
||||
$lineas = (new PresupuestoLineaModel())->getLineasPresupuesto($presupuestoEntity->id);
|
||||
|
||||
$input_data = [];
|
||||
$input_data['presupuesto'] = $presupuestoEntity;
|
||||
|
||||
return PresupuestoService::checkLineasPresupuesto($input_data, $lineas);
|
||||
}
|
||||
|
||||
protected function getLineasServicios($presupuestoEntity){
|
||||
|
||||
$serviciosPresupuesto = (object)array();
|
||||
|
||||
$serviciosPresupuesto->serviciosAcabado = (new PresupuestoAcabadosModel())->getResource($presupuestoEntity->id)->get()->getResultObject();
|
||||
$serviciosPresupuesto->serviciosPreimpresion = (new PresupuestoPreimpresionesModel())->getResource($presupuestoEntity->id)->get()->getResultObject();
|
||||
$serviciosPresupuesto->serviciosEncuadernacion = (new PresupuestoEncuadernacionesModel())->getResource($presupuestoEntity->id)->get()->getResultObject();
|
||||
$serviciosPresupuesto->serviciosManipulado = (new PresupuestoManipuladosModel())->getResource($presupuestoEntity->id)->get()->getResultObject();
|
||||
|
||||
$input_data = [];
|
||||
$input_data['presupuesto_id'] = $presupuestoEntity->id;
|
||||
$input_data['tipo_impresion_id'] = $presupuestoEntity->tipo_impresion_id;
|
||||
$input_data['tirada'] = $presupuestoEntity->tirada;
|
||||
$input_data['POD'] = $this->getPOD();
|
||||
$input_data['paginas'] = $presupuestoEntity->paginas;
|
||||
$input_data['is_duplicado'] = $presupuestoEntity->is_duplicado;
|
||||
|
||||
if($presupuestoEntity->papel_formato_personalizado){
|
||||
$input_data['ancho'] = $presupuestoEntity->ancho;
|
||||
$input_data['alto'] = $presupuestoEntity->alto;
|
||||
}
|
||||
else{
|
||||
$model = model("App\Models\Configuracion\PapelFormatoModel");
|
||||
$papel = $model->find($presupuestoEntity->papel_formato_id);
|
||||
if($papel){
|
||||
$input_data['ancho'] = $papel->ancho;
|
||||
$input_data['alto'] = $papel->alto;
|
||||
}
|
||||
else{
|
||||
$input_data['ancho'] = 0;
|
||||
$input_data['alto'] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return PresupuestoService::checkLineasServicios($input_data, $serviciosPresupuesto);
|
||||
}
|
||||
|
||||
protected function getLineasDirecciones($presupuestoEntity){
|
||||
|
||||
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
|
||||
return $model->where('presupuesto_id', $presupuesto_id)->findAll();
|
||||
$direccionesEnvio = $model->where('presupuesto_id', $presupuestoEntity->id)->findAll();
|
||||
|
||||
return PresupuestoService::checkLineasEnvios($direccionesEnvio);
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,19 +17,9 @@ class Test extends BaseController
|
||||
|
||||
public function index()
|
||||
{
|
||||
$presupuestoModel = model('App\Models\Presupuestos\PresupuestoModel');
|
||||
$presupuesto = $presupuestoModel->find(44);
|
||||
|
||||
$presupuestoAcabadosModel = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||
|
||||
echo '<pre>';
|
||||
$presupuestoLineaModel = model('App\Models\Presupuestos\PresupuestoLineaModel');
|
||||
$presupuestoLineaModel->duplicateLineasPresupuesto(48, 75);
|
||||
echo '</pre>';
|
||||
|
||||
|
||||
|
||||
|
||||
$status = PresupuestoService::checkMaquina(1995);
|
||||
var_dump($status);
|
||||
echo xdebug_info();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -51,7 +51,8 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
||||
"comentarios_pdf" => null,
|
||||
"comentarios_tarifa" => null,
|
||||
"comentarios_produccion" => null,
|
||||
"lomo" => null,
|
||||
"lomo_cubierta" => null,
|
||||
"lomo_sobrecubierta" => null,
|
||||
"total_presupuesto" => null,
|
||||
"envios_recoge_cliente" => false,
|
||||
"tirada_alternativa_json_data" => null,
|
||||
@ -86,6 +87,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
||||
"total_factor_ponderado" => null,
|
||||
"acabado_cubierta_id" => null,
|
||||
"acabado_sobrecubierta_id" => null,
|
||||
"is_duplicado" => false,
|
||||
];
|
||||
protected $casts = [
|
||||
"cliente_id" => "int",
|
||||
@ -120,7 +122,8 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
||||
"sobrecubiertas_ancho" => "float",
|
||||
"merma" => "float",
|
||||
"merma_cubierta" => "float",
|
||||
"lomo" => "?int",
|
||||
"lomo_cubierta" => "?float",
|
||||
"lomo_sobrecubierta" => "?float",
|
||||
"total_presupuesto" => "?float",
|
||||
"envios_recoge_cliente" => "boolean",
|
||||
"aprobado_user_id" => "?int",
|
||||
@ -147,5 +150,6 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
||||
"total_factor_ponderado" => "?float",
|
||||
"acabado_cubierta_id" => "int",
|
||||
"acabado_sobrecubierta_id" => "int",
|
||||
"is_duplicado" => "boolean",
|
||||
];
|
||||
}
|
||||
|
||||
@ -254,8 +254,15 @@ return [
|
||||
'duplicado' => 'DUPLICADO',
|
||||
|
||||
'duplicarConTipologias' => 'El presupuesto contiene lineas de presupuesto con datos de tipologías. Se va a duplicar el presupuesto con las mismas tipologías',
|
||||
|
||||
'presupuestoDuplicadoActualizacion' => 'El presupuesto ha sido creado duplicando un presupuesto existente. Se han actualizado los precios y las líneas de presupuesto con las tarifas actuales. Por favor, revíse la información.',
|
||||
|
||||
|
||||
'actualizacionPrecios' => 'Los siguientes datos del presupuesto se han actualizado debido a un cambio de tarifas o de los consumibles/maquinaria disponible en el sistema. Revise la información.',
|
||||
'actualizacionPreciosLP' => '<br> - Líneas de presupuesto',
|
||||
'actualizacionPreciosServicios' => '<br> - Servicios',
|
||||
'actualizacionPreciosEnvios' => '<br> - Precio envíos',
|
||||
|
||||
|
||||
'validation' => [
|
||||
'decimal' => 'El campo {field} debe contener un número decimal.',
|
||||
'integer' => 'El campo {field} debe contener un número entero.',
|
||||
|
||||
@ -95,7 +95,7 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel
|
||||
$builder = $this->db
|
||||
->table($this->table . " t1")
|
||||
->select(
|
||||
"t1.id AS id, t1.tipo AS tipo, t1.precio AS precio, t1.uso AS uso, t1.margen AS margen"
|
||||
"t1.id AS id, t1.tipo AS tipo, t1.precio AS precio, t1.uso AS uso, t1.margen AS margen, t1.is_deleted AS is_deleted, t2.nombre AS maquina"
|
||||
);
|
||||
|
||||
//JJO
|
||||
|
||||
@ -75,23 +75,7 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
|
||||
return [];
|
||||
}
|
||||
|
||||
private function calcularTarifa($tarifa, $tirada, $is_POD=false){
|
||||
|
||||
$precio_unidad = floatval($tarifa->precio_min) - (floatval($tarifa->precio_min) - floatval($tarifa->precio_max))/($tarifa->tirada_max - $tarifa->tirada_min) * ($tirada - $tarifa->tirada_min);
|
||||
if ($tirada > $tarifa->tirada_max)
|
||||
$precio_unidad = $tarifa->precio_max;
|
||||
$precio_unidad = $precio_unidad* (1+ floatval($tarifa->margen)/100.0);
|
||||
|
||||
$total = $precio_unidad * $tirada;
|
||||
$margen = floatval($tarifa->margen);
|
||||
|
||||
if (!$is_POD){
|
||||
$total += floatval($tarifa->tarifa_importe_fijo);
|
||||
}
|
||||
|
||||
return [$precio_unidad, $total, $margen];
|
||||
}
|
||||
|
||||
|
||||
public function deleteAllServicios($presupuesto_id){
|
||||
|
||||
$this->db
|
||||
@ -261,4 +245,21 @@ class PresupuestoAcabadosModel extends \App\Models\GoBaseModel
|
||||
return $builder;
|
||||
}
|
||||
|
||||
private function calcularTarifa($tarifa, $tirada, $is_POD=false){
|
||||
|
||||
$precio_unidad = floatval($tarifa->precio_min) - (floatval($tarifa->precio_min) - floatval($tarifa->precio_max))/($tarifa->tirada_max - $tarifa->tirada_min) * ($tirada - $tarifa->tirada_min);
|
||||
if ($tirada > $tarifa->tirada_max)
|
||||
$precio_unidad = $tarifa->precio_max;
|
||||
$precio_unidad = $precio_unidad* (1+ floatval($tarifa->margen)/100.0);
|
||||
|
||||
$total = $precio_unidad * $tirada;
|
||||
$margen = floatval($tarifa->margen);
|
||||
|
||||
if (!$is_POD){
|
||||
$total += floatval($tarifa->tarifa_importe_fijo);
|
||||
}
|
||||
|
||||
return [$precio_unidad, $total, $margen];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -90,6 +90,16 @@ class PresupuestoDireccionesModel extends \App\Models\GoBaseModel
|
||||
->groupEnd();
|
||||
}
|
||||
|
||||
|
||||
public function updateLineaEnvio($lineaEnvio){
|
||||
|
||||
$lineaTemp = $lineaEnvio;
|
||||
unset($lineaTemp->pais);
|
||||
|
||||
$this->save($lineaTemp);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get resource data for pdf generation.
|
||||
*
|
||||
|
||||
@ -337,6 +337,81 @@ class PresupuestoLineaModel extends \App\Models\GoBaseModel
|
||||
return $builder->orderBy("t1.id", "asc")->get()->getResultObject();
|
||||
}
|
||||
|
||||
public function updatePreciosLineasPresupuesto($id_linea, $new_linea)
|
||||
{
|
||||
$rot_total_impresion = $new_linea['fields']['precio_click_pedido']??0.0 +
|
||||
$new_linea['fields']['precio_tinta']??0.0+$new_linea['fields']['total_Corte']??0.0;
|
||||
|
||||
$data = [
|
||||
"pliegos_precio" => $new_linea['fields']['precios_pliegos'],
|
||||
"libro" => $new_linea['fields']['precio_libro'],
|
||||
"total_papel_pedido" => round($new_linea['fields']['precio_pedido'], 2),
|
||||
"margen_papel_pedido" => round($new_linea['fields']['margen_papel_pedido'], 2),
|
||||
"mano" => $new_linea['fields']['mano'],
|
||||
"precio_click" => round($new_linea['fields']['precio_click'], 6),
|
||||
"precio_click_pedido" => round($new_linea['fields']['precio_click_pedido'], 2),
|
||||
"margen_click_pedido" => round($new_linea['fields']['margen_click_pedido'], 2),
|
||||
"tiempo_maquina" => strtotime($new_linea['fields']['tiempo_maquina']) - strtotime('TODAY'),
|
||||
"tarifa_impresion_id" => $new_linea['fields']['tarifa_impresion_id'],
|
||||
"rotativa_total_impresion" => $rot_total_impresion,
|
||||
"rotativa_a_favor_fibra" => $new_linea['fields']['a_favor_fibra'] ?? 0,
|
||||
"rotativa_mxm" => $new_linea['fields']['maquina_velocidad'] ?? 0,
|
||||
"rotativa_resolucion" => $new_linea['fields']['resolucion'] ?? 0,
|
||||
"rotativa_area_paginas" => $new_linea['fields']['superficie'] ?? 0,
|
||||
"rotativa_num_gotas_negro" => $new_linea['fields']['num_gotas_negro'] ?? 0,
|
||||
"rotativa_num_gotas_cyan" => $new_linea['fields']['num_gotas_cyan'] ?? 0,
|
||||
"rotativa_num_gotas_magenta" => $new_linea['fields']['num_gotas_magenta'] ?? 0,
|
||||
"rotativa_num_gotas_amarillo" => $new_linea['fields']['num_gotas_amarillo'] ?? 0,
|
||||
"rotativa_num_gotas_cg" => $new_linea['fields']['num_gotas_cg'] ?? 0,
|
||||
"rotativa_peso_gotas_negro" => $new_linea["fields"]["peso_gotas_negro"] ?? 0,
|
||||
"rotativa_peso_gotas_cyan" => $new_linea['fields']['peso_gotas_cyan'] ?? 0,
|
||||
"rotativa_peso_gotas_magenta" => $new_linea['fields']['peso_gotas_magenta'] ?? 0,
|
||||
"rotativa_peso_gotas_amarillo" => $new_linea['fields']['peso_gotas_amarillo'] ?? 0,
|
||||
"rotativa_peso_gotas_cg" => $new_linea['fields']['peso_gotas_cg'] ?? 0,
|
||||
"rotativa_peso_gotas_negro_pedido" => $new_linea["fields"]["peso_gotas_negro_pedido"] ?? 0,
|
||||
"rotativa_peso_gotas_cyan_pedido" => $new_linea["fields"]["peso_gotas_cyan_pedido"] ?? 0,
|
||||
"rotativa_peso_gotas_magenta_pedido" => $new_linea["fields"]["peso_gotas_magenta_pedido"] ?? 0,
|
||||
"rotativa_peso_gotas_amarillo_pedido" => $new_linea["fields"]["peso_gotas_amarillo_pedido"] ?? 0,
|
||||
"rotativa_peso_gotas_cg_pedido" => $new_linea["fields"]["peso_gotas_cg_pedido"] ?? 0,
|
||||
"rotativa_precio_pag_negro" => $new_linea['fields']['precio_pagina_negro'] ?? 0,
|
||||
"rotativa_precio_pag_color" => $new_linea['fields']['precio_pagina_color'] ?? 0,
|
||||
"rotativa_factor_altura" => $new_linea['fields']['factor_altura'] ?? 0,
|
||||
"rotativa_factor_anchura" => $new_linea['fields']['factor_anchura'] ?? 0,
|
||||
"rotativa_pag_por_pliego" => $new_linea['fields']['paginas_por_pliego'] ?? 0,
|
||||
"rotativa_metros_libro" => $new_linea['fields']['metros_papel_libro'] ?? 0,
|
||||
"rotativa_metros_total" => $new_linea['fields']['metros_papel_total'] ?? 0,
|
||||
"rotativa_clicks_libro" => $new_linea['fields']['clicks_libro'] ?? 0,
|
||||
"rotativa_clicks_total" => $new_linea['fields']['clicks_pedido'] ?? 0,
|
||||
"rotativa_precio_tinta" => $new_linea['fields']['precio_tinta'] ?? 0,
|
||||
"rotativa_velocidad_corte" => $new_linea['fields']['velocidad_corte'] ?? 0,
|
||||
"rotativa_tiempo_corte" => $new_linea['fields']['tiempo_corte'] ?? 0,
|
||||
"rotativa_precio_hora_corte" => $new_linea['fields']['precio_hora_corte'] ?? 0,
|
||||
"rotativa_total_corte" => $new_linea['fields']['total_corte'] ?? 0,
|
||||
"horas_maquina" => round($new_linea['fields']['horas_maquina'],4),
|
||||
"precio_hora" => $new_linea['fields']['precio_hora'] ?? 0,
|
||||
"precio_impresion" => $new_linea['fields']['precio_impresion_horas'] ?? 0,
|
||||
"total_linea" => round($new_linea['fields']['total_impresion'], 2) ?? 0,
|
||||
"margen_impresion" => $new_linea['fields']['margen_impresion_horas'] ?? 0,
|
||||
];
|
||||
|
||||
if(array_key_exists('datosTipologias', $new_linea['fields'])){
|
||||
$data += [
|
||||
"rotativa_negro" => $new_linea['fields']['datosTipologias']->negro ?? 0,
|
||||
"rotativa_cyan" => $new_linea['fields']['datosTipologias']->cyan ?? 0,
|
||||
"rotativa_magenta" => $new_linea['fields']['datosTipologias']->magenta ?? 0,
|
||||
"rotativa_amarillo" => $new_linea['fields']['datosTipologias']->amarillo ?? 0,
|
||||
"rotativa_cg" => $new_linea['fields']['datosTipologias']->cg ?? 0,
|
||||
"rotativa_gota_negro" => $new_linea['fields']['datosTipologias']->gota_negro ?? 0,
|
||||
"rotativa_gota_color" => $new_linea['fields']['datosTipologias']->gota_color
|
||||
];
|
||||
}
|
||||
$this->db
|
||||
->table($this->table . " t1")
|
||||
->where('id', $id_linea)
|
||||
->set($data)
|
||||
->update();
|
||||
}
|
||||
|
||||
public function deleteLineasPresupuesto($presupuesto_id)
|
||||
{
|
||||
$this->db
|
||||
|
||||
@ -72,7 +72,8 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
"comentarios_pdf",
|
||||
"comentarios_tarifa",
|
||||
"comentarios_produccion",
|
||||
"lomo",
|
||||
"lomo_cubierta",
|
||||
"lomo_sobrecubierta",
|
||||
"total_presupuesto",
|
||||
"envios_recoge_cliente",
|
||||
"tirada_alternativa_json_data",
|
||||
@ -104,6 +105,7 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
"total_factor_ponderado",
|
||||
"acabado_cubierta_id",
|
||||
"acabado_sobrecubierta_id",
|
||||
"is_duplicado"
|
||||
];
|
||||
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
|
||||
|
||||
@ -263,6 +265,13 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
|
||||
}
|
||||
|
||||
public function removeIsDuplicado($presupuesto_id){
|
||||
$this->db
|
||||
->table($this->table . " t1")
|
||||
->where('id', $presupuesto_id)
|
||||
->set('is_duplicado', false)
|
||||
->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get resource data for creating PDFs.
|
||||
@ -277,8 +286,9 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
->table($this->table . " t1")
|
||||
->select(
|
||||
"t1.id AS id, t1.created_at AS fecha, t1.titulo AS titulo, t1.autor AS autor, t1.ferro AS ferro,
|
||||
t1.ferro_digital AS ferro_digital, t1.prototipo AS prototipo, t1.solapas AS solapas, t1.lomo AS lomo,
|
||||
t1.solapas_ancho AS solapas_ancho, t1.paginas AS paginas, t1.tirada AS tirada, t1.coleccion AS coleccion,
|
||||
t1.ferro_digital AS ferro_digital, t1.prototipo AS prototipo, t1.solapas AS solapas, t1.solapas_sobrecubierta AS solapas_sobrecubierta,
|
||||
t1.lomo_cubierta AS lomo_cubierta, t1.lomo_sobrecubierta AS lomo_sobrecubierta,
|
||||
t1.solapas_ancho AS solapas_ancho, t1.solapas_sobrecubierta_ancho AS solapas_sobrecubierta_ancho, t1.paginas AS paginas, t1.tirada AS tirada, t1.coleccion AS coleccion,
|
||||
t1.retractilado AS retractilado, t1.guardas AS guardas, t1.marcapaginas AS marcapaginas,
|
||||
t1.comentarios_pdf AS comentarios_pdf, t1.tirada_alternativa_json_data AS tiradas_alternativas,
|
||||
t1.total_presupuesto AS total_presupuesto, t1.total_precio_unidad AS total_precio_unidad,
|
||||
@ -297,6 +307,4 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,20 @@ use CodeIgniter\Config\BaseService;
|
||||
|
||||
use App\Models\Configuracion\MaquinasTarifasImpresionModel;
|
||||
use App\Models\Clientes\ClientePreciosModel;
|
||||
use App\Models\Configuracion\MaquinaModel;
|
||||
use App\Models\Configuracion\PapelImpresionModel;
|
||||
use App\Models\Configuracion\PapelGenericoModel;
|
||||
use App\Models\Configuracion\TipoPresupuestoModel;
|
||||
use App\Models\Configuracion\PapelFormatoModel;
|
||||
|
||||
use App\Models\Presupuestos\PresupuestoLineaModel;
|
||||
|
||||
use App\Models\Presupuestos\PresupuestoAcabadosModel;
|
||||
use App\Models\Presupuestos\PresupuestoManipuladosModel;
|
||||
use App\Models\Presupuestos\PresupuestoEncuadernacionesModel;
|
||||
|
||||
use App\Models\Presupuestos\PresupuestoDireccionesModel;
|
||||
use App\Models\Tarifas\TarifaEnvioModel;
|
||||
|
||||
|
||||
|
||||
@ -218,6 +232,9 @@ class PresupuestoService extends BaseService
|
||||
|
||||
// precio del pliego de impresion
|
||||
$linea['fields'] = PresupuestoService::getCostesLineaRotativa($maquina, $papel, $datosPedido, $parametrosRotativa);
|
||||
if(count($linea['fields']) == 0){
|
||||
return [];
|
||||
}
|
||||
|
||||
[$precio_pliego_impresion, $margen_pliego_impresion] = PresupuestoService::getPrecioPliego($maquina, $papel, $datosPedido->paginas);
|
||||
|
||||
@ -449,6 +466,10 @@ class PresupuestoService extends BaseService
|
||||
$factor_altura = round($maquina->alto_impresion / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2);
|
||||
$factor_altura_click = round($maquina->alto_click / ($data['alto'] + self::MARGEN_PAGINAS_ROTATIVA), 2);
|
||||
|
||||
if(floor($factor_anchura) == 0){
|
||||
return [];
|
||||
}
|
||||
|
||||
$multiplicador_pliego = $datosPedido->isCosido ? 4 : 2;
|
||||
$paginas_por_pliego = round(floor($factor_anchura) * $factor_altura * $multiplicador_pliego, 2);
|
||||
$pliegos_libro = round($paginas_por_pliego ? $datosPedido->paginas / $paginas_por_pliego : 0, 2);
|
||||
@ -949,6 +970,803 @@ class PresupuestoService extends BaseService
|
||||
return $opciones_papel;
|
||||
}
|
||||
|
||||
|
||||
public static function actualizarResumenPresupuesto($presupuesto_id)
|
||||
{
|
||||
$presupuesto = (new PresupuestoModel())->find($presupuesto_id);
|
||||
$lineas = (new LineaPresupuestoModel())->where('presupuesto_id', $presupuesto_id)->findAll();
|
||||
|
||||
}
|
||||
|
||||
public static function checkLineasPresupuesto($input_data, $array_lineas)
|
||||
{
|
||||
|
||||
$data['tipo_impresion_id'] = ($input_data['presupuesto'])->tipo_impresion_id;
|
||||
$data['tirada'] = ($input_data['presupuesto'])->tirada;
|
||||
$data['merma'] = ($input_data['presupuesto'])->merma;
|
||||
$data['papel_formato_id'] = ($input_data['presupuesto'])->papel_formato_id;
|
||||
$data['papel_formato_personalizado'] = ($input_data['presupuesto'])->papel_formato_personalizado;
|
||||
$data['papel_formato_ancho'] = ($input_data['presupuesto'])->papel_formato_ancho;
|
||||
$data['papel_formato_alto'] = ($input_data['presupuesto'])->papel_formato_alto;
|
||||
$data['cliente_id'] = ($input_data['presupuesto'])->cliente_id;
|
||||
$data['solapas'] = ($input_data['presupuesto'])->solapas;
|
||||
$data['solapas_ancho'] = ($input_data['presupuesto'])->solapas_ancho;
|
||||
$data['solapas_sobrecubierta'] = ($input_data['presupuesto'])->solapas_sobrecubierta;
|
||||
$data['solapas_ancho_sobrecubierta'] = ($input_data['presupuesto'])->solapas_ancho_sobrecubierta;
|
||||
$data['lomo_cubierta'] = ($input_data['presupuesto'])->lomo_cubierta;
|
||||
$data['lomo_sobrecubierta'] = ($input_data['presupuesto'])->lomo_sobrecubierta;
|
||||
|
||||
$cambios = false;
|
||||
|
||||
$lineas = [];
|
||||
|
||||
foreach ($array_lineas as $linea) {
|
||||
|
||||
// Si el papel o la máquina no existen, se utiliza la más barata del comparador
|
||||
if (!PresupuestoService::checkMaquina($linea->maquina_id) || !PresupuestoService::checkPapelImpresion($linea->papel_impresion_id)) {
|
||||
|
||||
if(($input_data['presupuesto'])->papel_formato_personalizado == 0){
|
||||
$papel_formato = (new PapelFormatoModel())->find(($input_data['presupuesto'])->papel_formato_id);
|
||||
$ancho = $papel_formato->ancho;
|
||||
$alto = $papel_formato->alto;
|
||||
}
|
||||
else
|
||||
{
|
||||
$ancho = ($input_data['presupuesto'])->papel_formato_ancho;
|
||||
$alto = ($input_data['presupuesto'])->papel_formato_alto;
|
||||
}
|
||||
|
||||
$papel_generico = (new PapelGenericoModel)->find($linea->papel_id);
|
||||
$papel_generico = [
|
||||
'id' => $papel_generico->id,
|
||||
'nombre' => $papel_generico->nombre,
|
||||
];
|
||||
|
||||
// Hay que ver si es rotativa o plana
|
||||
// Si es rotativa
|
||||
if(str_contains($linea->tipo, '_rot_')){
|
||||
|
||||
$datos = [
|
||||
'datosPedido' => (object)array(
|
||||
'paginas' => ($input_data['presupuesto'])->paginas,
|
||||
'tirada' => ($input_data['presupuesto'])->tirada,
|
||||
'merma' => ($input_data['presupuesto'])->merma,
|
||||
'ancho' => $ancho,
|
||||
'alto' => $alto,
|
||||
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
|
||||
'isCosido' => (new TipoPresupuestoModel())->get_isCosido(($input_data['presupuesto'])->tipo_impresion_id),
|
||||
),
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $linea->gramaje,
|
||||
'paginas' => (object)array(
|
||||
'negro' => ($input_data['presupuesto'])->paginas - $linea->rotativa_pag_color,
|
||||
'color' => $linea->rotativa_pag_color,
|
||||
),
|
||||
'cliente_id' => ($input_data['presupuesto'])->cliente_id,
|
||||
'datosTipolog' => [(object)array(
|
||||
'negro' => $linea->rotativa_negro,
|
||||
'cyan' => $linea->rotativa_cyan,
|
||||
'magenta' => $linea->rotativa_magenta,
|
||||
'amarillo' => $linea->rotativa_amarillo,
|
||||
'cg' => $linea->rotativa_cg,
|
||||
'gota_negro' => $linea->rotativa_gota_negro,
|
||||
'gota_color' => $linea->rotativa_gota_color,
|
||||
)]
|
||||
];
|
||||
|
||||
$comp_data = PresupuestoService::obtenerComparadorRotativa($datos);
|
||||
}
|
||||
// Si es plana
|
||||
else{
|
||||
|
||||
$datos = [
|
||||
'tipo_impresion_id' => $data['tipo_impresion_id'],
|
||||
'datosPedido' => (object)array(
|
||||
'paginas' => ($input_data['presupuesto'])->paginas,
|
||||
'tirada' => ($input_data['presupuesto'])->tirada,
|
||||
'merma' => ($input_data['presupuesto'])->merma,
|
||||
'ancho' => $ancho,
|
||||
'alto' => $alto,
|
||||
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
|
||||
'isCosido' => (new TipoPresupuestoModel())->get_isCosido(($input_data['presupuesto'])->tipo_impresion_id),
|
||||
),
|
||||
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
|
||||
'papel_generico' => $papel_generico,
|
||||
'gramaje' => $linea->gramaje,
|
||||
'cliente_id' => ($input_data['presupuesto'])->cliente_id,
|
||||
'datosTipolog' => [(object)array(
|
||||
'negro' => $linea->rotativa_negro,
|
||||
'cyan' => $linea->rotativa_cyan,
|
||||
'magenta' => $linea->rotativa_magenta,
|
||||
'amarillo' => $linea->rotativa_amarillo,
|
||||
'cg' => $linea->rotativa_cg,
|
||||
'gota_negro' => $linea->rotativa_gota_negro,
|
||||
'gota_color' => $linea->rotativa_gota_color,
|
||||
)]
|
||||
];
|
||||
|
||||
// si la línea es cubierta o sobrecubierta, es HQ y color
|
||||
if( str_contains($linea->tipo, 'cubierta') ){
|
||||
$datos['isColor'] = true;
|
||||
$datos['isHq'] = true;
|
||||
|
||||
// además se añade los campos de lomo y solapas y el uso
|
||||
if( str_contains($linea->tipo, 'sobrecubierta') ){
|
||||
$datos['datosPedido']->solapas = ($input_data['presupuesto'])->solapas_sobrecubierta;
|
||||
$datos['datosPedido']->solapas_ancho = ($input_data['presupuesto'])->solapas_ancho_sobrecubierta;
|
||||
$datos['datosPedido']->lomo = ($input_data['presupuesto'])->lomo_sobrecubierta;
|
||||
$datos['uso'] = 'sobrecubierta';
|
||||
}
|
||||
else{
|
||||
$datos['datosPedido']->solapas = ($input_data['presupuesto'])->solapas;
|
||||
$datos['datosPedido']->solapas_ancho = ($input_data['presupuesto'])->solapas_ancho;
|
||||
$datos['datosPedido']->lomo = ($input_data['presupuesto'])->lomo_cubierta;
|
||||
$datos['uso'] = 'cubierta';
|
||||
}
|
||||
}
|
||||
else{
|
||||
$datos['isColor'] = str_contains($linea->tipo, '_color') ? true : false;
|
||||
$datos['isHq'] = str_contains($linea->tipo, 'hq') ? true : false;
|
||||
$datos['uso'] = 'interior';
|
||||
}
|
||||
|
||||
if( str_contains($linea->tipo, 'guardas') ){
|
||||
$datos['uso'] = 'guardas';
|
||||
$datos['datosPedido']->paginas_impresion = linea->paginas_impresion;
|
||||
}
|
||||
|
||||
$comp_data = PresupuestoService::obtenerComparadorPlana($datos);
|
||||
|
||||
}
|
||||
|
||||
// se ordena $comp_data usando el campo ['fields]['total_impresion']
|
||||
usort($comp_data, function($a, $b) {
|
||||
return $a['fields']['total_impresion'] <=> $b['fields']['total_impresion'];
|
||||
});
|
||||
(new PresupuestoLineaModel())->updatePreciosLineasPresupuesto($linea->id, $comp_data[0]);
|
||||
$linea_to_save = (new PresupuestoLineaModel())->find($linea->id);
|
||||
$cambios = true;
|
||||
array_push($lineas, $linea_to_save);
|
||||
}
|
||||
// Si existe el papel y la máquina, se recalcula el precio con los mismos
|
||||
// parámetros y se comprueba
|
||||
else{
|
||||
$nueva_linea = PresupuestoService::obtenerValorLineaPresupuesto($data, $linea);
|
||||
if(count($nueva_linea) >0){
|
||||
if(round($nueva_linea['fields']['total_impresion'],2) != $linea->total_linea){
|
||||
(new PresupuestoLineaModel())->updatePreciosLineasPresupuesto($linea->id, $nueva_linea);
|
||||
$linea_to_save = (new PresupuestoLineaModel())->find($linea->id);
|
||||
$cambios = true;
|
||||
array_push($lineas, $linea_to_save);
|
||||
}
|
||||
else{
|
||||
array_push($lineas, $linea);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return [$cambios, $lineas];
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static function obtenerValorLineaPresupuesto($input_data, $linea){
|
||||
|
||||
$tipo_impresion_id = $input_data['tipo_impresion_id'];
|
||||
$tirada = $input_data['tirada'];
|
||||
$merma = $input_data['merma'];
|
||||
$papel_formato_id = $input_data['papel_formato_id'];
|
||||
$papel_formato_personalizado = $input_data['papel_formato_personalizado'];
|
||||
$ancho = $input_data['papel_formato_ancho'];
|
||||
$alto = $input_data['papel_formato_alto'];
|
||||
$cliente_id = $input_data['cliente_id'];
|
||||
$solapas = $input_data['solapas'];
|
||||
$solapas_sobrecubierta = $input_data['solapas_sobrecubierta'];
|
||||
$solapas_ancho_cubierta = $input_data['solapas_ancho'];
|
||||
$solapas_ancho_sobrecubierta = $input_data['solapas_ancho_sobrecubierta'];
|
||||
$lomo_cubierta = $input_data['lomo_cubierta'];
|
||||
$lomo_sobrecubierta = $input_data['lomo_sobrecubierta'];
|
||||
|
||||
if($papel_formato_personalizado == 0){
|
||||
$papel_formato = (new PapelFormatoModel())->find($papel_formato_id);
|
||||
$ancho = $papel_formato->ancho;
|
||||
$alto = $papel_formato->alto;
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$output_data = [];
|
||||
|
||||
$papel_impresion = (new PapelImpresionModel())->find($linea->papel_impresion_id);
|
||||
$maquina = (new MaquinaModel())->find($linea->maquina_id);
|
||||
$maquina->maquina_id = $maquina->id;
|
||||
$maquina->maquina = $maquina->nombre;
|
||||
$papel_generico = (new PapelGenericoModel())->find($linea->papel_id);
|
||||
$papel_generico = array(
|
||||
'id' => $papel_generico->id,
|
||||
'nombre' => $papel_generico->nombre,
|
||||
);
|
||||
|
||||
$data['datosPedido'] = (object)array(
|
||||
'paginas' => $linea->paginas,
|
||||
'tirada' => $tirada,
|
||||
'merma' => $merma,
|
||||
'ancho' => $ancho,
|
||||
'alto' => $alto,
|
||||
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
|
||||
'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id),
|
||||
);
|
||||
$data['cliente_id'] = $cliente_id;
|
||||
$data['papel'] = $papel_impresion;
|
||||
$data['maquina'] = $maquina;
|
||||
$data['papel_generico'] = $papel_generico;
|
||||
$data['a_favor_fibra'] = $linea->rotativa_a_favor_fibra;
|
||||
$data['datosTipolog'] = [(object)array(
|
||||
'negro' => $linea->rotativa_negro,
|
||||
'cyan' => $linea->rotativa_cyan,
|
||||
'magenta' => $linea->rotativa_magenta,
|
||||
'amarillo' => $linea->rotativa_amarillo,
|
||||
'cg' => $linea->rotativa_cg,
|
||||
'gota_negro' => $linea->rotativa_gota_negro,
|
||||
'gota_color' => $linea->rotativa_gota_color,
|
||||
)];
|
||||
$data['gramaje'] = $linea->gramaje;
|
||||
|
||||
switch($linea->tipo){
|
||||
|
||||
case 'lp_bn':
|
||||
case 'lp_bnhq':
|
||||
case 'lp_color':
|
||||
case 'lp_colorhq':
|
||||
case 'lp_guardas':
|
||||
$data['uso'] = 'interior';
|
||||
$isColor = strpos($linea->tipo, 'color') !== false;
|
||||
$isHq = strpos($linea->tipo, 'hq') !== false;
|
||||
$tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
|
||||
$opciones_papel = PresupuestoService::get_opciones_papel('interior', $isColor);
|
||||
|
||||
if($linea->tipo == 'lp_guardas'){
|
||||
$data['datosPedido']->paginas_impresion = $linea->paginas_impresion;
|
||||
// Para el caso de Fresado y Cosido tapa dura, las guardas son un diptico
|
||||
// y hay que imprimirlas como "cosido" (dos hojas pegadas). En el caso de espiral
|
||||
// o wire-o tapa dura, las guardas se imprimen como hojas sueltas
|
||||
if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
|
||||
$data['datosPedido']->isCosido = true;
|
||||
} else if ($tipo_impresion_id == 5 || $tipo_impresion_id == 7) {
|
||||
$data['datosPedido']->isCosido = false;
|
||||
}
|
||||
}
|
||||
|
||||
$data['tipo'] = $tipo;
|
||||
$data['isColor'] = $isColor;
|
||||
$data['opciones_papel'] = $opciones_papel;
|
||||
|
||||
$output_data = PresupuestoService::getLineaPresupuestoPlana($data);
|
||||
break;
|
||||
|
||||
|
||||
case 'lp_rot_color':
|
||||
case 'lp_rot_bn':
|
||||
$data['uso'] = 'interior';
|
||||
$tipo = $linea->rotativa_pag_color>0 ? 'color' : 'negro';
|
||||
$data['paginas'] = (object)array(
|
||||
'negro' => $linea->paginas-$linea->rotativa_pag_color,
|
||||
'color' => $linea->rotativa_pag_color,
|
||||
);
|
||||
|
||||
$data['tipo'] = $tipo;
|
||||
$data['parametrosRotativa'] = (object)array(
|
||||
'a_favor_fibra' => $linea->rotativa_a_favor_fibra,
|
||||
'bnPages' => $data['paginas']->negro,
|
||||
'colorPages' => $data['paginas']->color,
|
||||
'rotativa_negro' => $linea->rotativa_negro,
|
||||
'rotativa_cyan' => $linea->rotativa_cyan,
|
||||
'rotativa_magenta' => $linea->rotativa_magenta,
|
||||
'rotativa_amarillo' => $linea->rotativa_amarillo,
|
||||
'rotativa_gota_negro' => $linea->rotativa_gota_negro,
|
||||
'rotativa_gota_color' => $linea->rotativa_gota_color,
|
||||
);
|
||||
|
||||
$output_data = PresupuestoService::getLineaPresupuestoRotativa($data);
|
||||
break;
|
||||
|
||||
case 'lp_cubierta':
|
||||
case 'lp_sobrecubierta':
|
||||
|
||||
$data['uso'] = ($linea->tipo == 'lp_cubierta')? 'cubierta':'sobrecubierta';
|
||||
$data['tipo'] = 'colorhq';
|
||||
$data['isColor'] = true;
|
||||
$data['datosPedido']->solapas = ($linea->tipo == 'lp cubierta')? $solapas : $solapas_sobrecubierta;
|
||||
$data['datosPedido']->solapas_ancho = ($linea->tipo == 'lp cubierta')? $solapas_ancho_cubierta : $solapas_ancho_sobrecubierta;
|
||||
$data['datosPedido']->lomo = ($linea->tipo == 'lp cubierta')? $lomo_cubierta : $lomo_sobrecubierta;
|
||||
|
||||
$opciones_papel = PresupuestoService::get_opciones_papel($data['uso'], true);
|
||||
$data['opciones_papel'] = $opciones_papel;
|
||||
|
||||
$data['datosPedido']->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($data['uso'], $tipo_impresion_id, $data['datosPedido']);
|
||||
$data['datosPedido']->altoExteriores = PresupuestoService::getAltoTotalExteriores($data['uso'], $tipo_impresion_id, $data['datosPedido']);
|
||||
|
||||
$output_data = PresupuestoService::getLineaPresupuestoPlana($data);
|
||||
break;
|
||||
}
|
||||
return $output_data;
|
||||
}
|
||||
|
||||
// Funcion que procesa los servicios y actualiza los precios en caso de cambio
|
||||
public static function checkLineasServicios($input_data, $servicios){
|
||||
|
||||
$cambio_en_servicios = false;
|
||||
$cambio = false;
|
||||
|
||||
if(count($servicios->serviciosAcabado)>0){
|
||||
|
||||
[$cambio, $servicios->serviciosAcabado] =
|
||||
PresupuestoService::procesarServiciosAcabado($input_data, $servicios->serviciosAcabado);
|
||||
|
||||
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
|
||||
}
|
||||
|
||||
if(count($servicios->serviciosManipulado)>0){
|
||||
|
||||
[$cambio, $servicios->serviciosManipulado] =
|
||||
PresupuestoService::procesarServiciosManipulado($input_data, $servicios->serviciosManipulado);
|
||||
|
||||
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
|
||||
}
|
||||
|
||||
if(count($servicios->serviciosEncuadernacion)>0){
|
||||
|
||||
[$cambio, $servicios->serviciosEncuadernacion] =
|
||||
PresupuestoService::procesarServiciosEncuadernacion($input_data, $servicios->serviciosEncuadernacion);
|
||||
|
||||
$cambio_en_servicios = $cambio_en_servicios? $cambio_en_servicios: $cambio;
|
||||
}
|
||||
|
||||
// Los servicios de preimpresion se dejan tal y como esten
|
||||
|
||||
return [$cambio_en_servicios, $servicios];
|
||||
}
|
||||
|
||||
|
||||
// Funcion que procesa los servicios de acabado del presupuesto
|
||||
// y actualiza los precios en caso de cambio de valor en precio_unidad
|
||||
private static function procesarServiciosAcabado($input_data, $servicios){
|
||||
|
||||
$serviciosUpdated = [];
|
||||
$cambio = false;
|
||||
|
||||
$model = new PresupuestoAcabadosModel();
|
||||
foreach ($servicios as $servicio) {
|
||||
|
||||
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_acabado_id, $input_data['tirada'], $input_data['POD']);
|
||||
if($nueva_tarifa && count($nueva_tarifa)>0){
|
||||
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
|
||||
$nueva_tarifa[0]->margen != $servicio->margen){
|
||||
|
||||
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
|
||||
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
|
||||
$servicio->margen = round($nueva_tarifa[0]->margen);
|
||||
$cambio = true;
|
||||
}
|
||||
array_push($serviciosUpdated, $servicio);
|
||||
$servicio_temp = $servicio;
|
||||
$servicio_temp->tarifa_id = $servicio_temp->tarifa_acabado_id;
|
||||
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return [$cambio, $serviciosUpdated];
|
||||
}
|
||||
|
||||
// Funcion que procesa los servicios de manipulado del presupuesto
|
||||
// y actualiza los precios en caso de cambio de valor en precio_unidad
|
||||
private static function procesarServiciosManipulado($input_data, $servicios){
|
||||
|
||||
$serviciosUpdated = [];
|
||||
$cambio = false;
|
||||
|
||||
$model = new PresupuestoManipuladosModel();
|
||||
foreach ($servicios as $servicio) {
|
||||
$count = 0;
|
||||
$nueva_tarifa = $model->getPrecioTarifa($servicio->tarifa_manipulado_id, $input_data['tirada'], $input_data['POD']);
|
||||
if($nueva_tarifa && count($nueva_tarifa)>0){
|
||||
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
|
||||
$nueva_tarifa[0]->margen != $servicio->margen){
|
||||
|
||||
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
|
||||
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
|
||||
$servicio->margen = round($nueva_tarifa[0]->margen);
|
||||
$cambio = true;
|
||||
}
|
||||
array_push($serviciosUpdated, $servicio);
|
||||
$servicio_temp = $servicio;
|
||||
$servicio_temp->tarifa_id = $servicio_temp->tarifa_manipulado_id;
|
||||
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return [$cambio, $serviciosUpdated];
|
||||
}
|
||||
|
||||
|
||||
// Funcion que procesa los servicios de encuadernacion del presupuesto
|
||||
// y actualiza los precios en caso de cambio de valor en precio_unidad
|
||||
private static function procesarServiciosEncuadernacion($input_data, $servicios){
|
||||
|
||||
$serviciosUpdated = [];
|
||||
$cambio = false;
|
||||
|
||||
$model = new PresupuestoEncuadernacionesModel();
|
||||
$tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
|
||||
|
||||
foreach ($servicios as $servicio) {
|
||||
|
||||
// Si es un presupuesto duplicado hay que buscar el proveedor más barato
|
||||
if($input_data['is_duplicado']){
|
||||
if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){
|
||||
$nueva_tarifa = $model->getPrecioTarifaHoras(
|
||||
$servicio->tarifa_encuadernado_id,
|
||||
$input_data['paginas'],
|
||||
$input_data['tirada'],
|
||||
-1,
|
||||
$input_data['POD']);
|
||||
}else{
|
||||
$nueva_tarifa = $model->getPrecioTarifa(
|
||||
$servicio->tarifa_encuadernado_id,
|
||||
$input_data['paginas'],
|
||||
$input_data['tirada'],
|
||||
$input_data['ancho'],
|
||||
$input_data['alto'],
|
||||
-1,
|
||||
$input_data['POD']);
|
||||
}
|
||||
|
||||
}
|
||||
// En caso de que el presupuesto no sea duplicado, recalcular la tarifa
|
||||
// con el mismo proveedor
|
||||
else{
|
||||
if($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)){
|
||||
$nueva_tarifa = $model->getPrecioTarifaHoras(
|
||||
$servicio->tarifa_encuadernado_id,
|
||||
$input_data['paginas'],
|
||||
$input_data['tirada'],
|
||||
$servicio->proveedor_id,
|
||||
$input_data['POD']);
|
||||
}else{
|
||||
$nueva_tarifa = $model->getPrecioTarifa(
|
||||
$servicio->tarifa_encuadernado_id,
|
||||
$input_data['paginas'],
|
||||
$input_data['tirada'],
|
||||
$input_data['ancho'],
|
||||
$input_data['alto'],
|
||||
$servicio->proveedor_id,
|
||||
$input_data['POD']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($nueva_tarifa && count($nueva_tarifa)>0){
|
||||
if(!isset($nueva_tarifa[0]->proveedor_id)){
|
||||
$nueva_tarifa[0]->proveedor_id = null;
|
||||
}
|
||||
// Si el presupuesto no es duplicado, se comprueba que
|
||||
// no ha cambiado el precio unidad
|
||||
if(round($nueva_tarifa[0]->precio_unidad, 2) != $servicio->precio_unidad ||
|
||||
$nueva_tarifa[0]->margen != $servicio->margen){
|
||||
|
||||
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
|
||||
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
|
||||
$servicio->margen = round($nueva_tarifa[0]->margen);
|
||||
$cambio = true;
|
||||
}
|
||||
else if($input_data['is_duplicado'] && $nueva_tarifa[0]->proveedor_id != $servicio->proveedor_id){
|
||||
$servicio->precio_unidad = round($nueva_tarifa[0]->precio_unidad, 2);
|
||||
$servicio->precio_total = round($nueva_tarifa[0]->total, 2);
|
||||
$servicio->margen = round($nueva_tarifa[0]->margen);
|
||||
$servicio->proveedor = $nueva_tarifa[0]->proveedor;
|
||||
$servicio->proveedor_id = $nueva_tarifa[0]->proveedor_id;
|
||||
$cambio = true;
|
||||
}
|
||||
array_push($serviciosUpdated, $servicio);
|
||||
$servicio_temp = $servicio;
|
||||
$servicio_temp->tarifa_id = $servicio_temp->tarifa_encuadernado_id;
|
||||
$model->updateTarifas($input_data['presupuesto_id'], array($servicio_temp));
|
||||
}
|
||||
}
|
||||
|
||||
return [$cambio, $serviciosUpdated];
|
||||
}
|
||||
|
||||
|
||||
public static function checkLineasEnvios($envios){
|
||||
|
||||
$cambio = false;
|
||||
|
||||
if(count($envios)>0){
|
||||
$model = new TarifaEnvioModel();
|
||||
|
||||
foreach ($envios as $envio) {
|
||||
$paisId = $envio->pais_id;
|
||||
$cp= $envio->cp;
|
||||
$peso= $envio->peso;
|
||||
$tipo_envio= $envio->entregaPieCalle==1?'palets':'cajas';
|
||||
|
||||
$nueva_tarifa = $model->getTarifaEnvio($paisId, $cp, $peso, $tipo_envio);
|
||||
|
||||
if($nueva_tarifa && count($nueva_tarifa)>0){
|
||||
$coste = 0;
|
||||
$margen = 0;
|
||||
if($peso>$nueva_tarifa[0]->peso_max){
|
||||
$coste += floatval($nueva_tarifa[0]->peso_min) + ($peso-floatval($nueva_tarifa[0]->peso_min))*floatval($nueva_tarifa[0]->precio_adicional);
|
||||
}
|
||||
// si no se calcula linealmente
|
||||
else{
|
||||
$m=(floatval($nueva_tarifa[0]->precio_max)-floatval($nueva_tarifa[0]->precio_min)) / ((floatval($nueva_tarifa[0]->peso_max)-floatval($nueva_tarifa[0]->peso_min)));
|
||||
$b=floatval($nueva_tarifa[0]->precio_max)-$m*floatval($nueva_tarifa[0]->peso_max);
|
||||
$coste += floatval($m*$peso+$b);
|
||||
}
|
||||
$margen += $coste*floatval($nueva_tarifa[0]->margen)/100.0;
|
||||
|
||||
if(round($coste, 2) != $envio->precio ||
|
||||
$margen != $envio->margen || $nueva_tarifa[0]->id != $envio->tarifa_id){
|
||||
|
||||
$envio->precio = round($coste, 2);
|
||||
$envio->margen = $margen;
|
||||
$envio->tarifa_id = $nueva_tarifa[0]->id;
|
||||
$cambio = true;
|
||||
|
||||
$presupuestoDirecciones = new PresupuestoDireccionesModel();
|
||||
$presupuestoDirecciones->updateLineaEnvio($envio);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return [$cambio, $envios];
|
||||
}
|
||||
|
||||
|
||||
// Funcion que obtiene el coste para impresión en rotativa
|
||||
// y devuelve un array con los datos de la lineas
|
||||
// Parametros de entrada: $input_data es un array con los siguientes datos:
|
||||
// - paginas: objeto con las paginas a imprimir en color y negro
|
||||
// - datosPedido: un objeto que contiene los siguientes campos
|
||||
// * paginas: numero total de páginas
|
||||
// * tirada: numero de ejemplares a imprimir
|
||||
// * merma: número de ejemplares extra a imprimir
|
||||
// * ancho: ancho del libro
|
||||
// * alto: alto del libro
|
||||
// * a_favor_fibra: dirección de la impresión
|
||||
// * isCosido: indica si el libro es cosido o no
|
||||
// - papel_generico: objeto que contiene el id y el nombre del papel generico
|
||||
// - gramaje: gramaje del papel seleccionado
|
||||
// - cliente_id: id del cliente al que va destinado el presupuesto
|
||||
// - datosTipolog: datos referentes a las tintas
|
||||
public static function obtenerComparadorRotativa($input_data){
|
||||
|
||||
$paginas = $input_data['paginas'];
|
||||
$datosPedido = $input_data['datosPedido'];
|
||||
$gramaje = $input_data['gramaje'];
|
||||
$papel_generico = $input_data['papel_generico'];
|
||||
$cliente_id = $input_data['cliente_id'];
|
||||
$datosTipolog = $input_data['datosTipolog'];
|
||||
|
||||
$tipo = $paginas->color > 0 ? 'color' : 'negro';
|
||||
$uso = 'interior';
|
||||
|
||||
$parametrosRotativa = (object)array(
|
||||
'a_favor_fibra' => $datosPedido->a_favor_fibra,
|
||||
'bnPages' => $paginas->negro,
|
||||
'colorPages' => $paginas->color,
|
||||
'rotativa_gota_negro' => 0,
|
||||
'rotativa_gota_color' => 0,
|
||||
);
|
||||
|
||||
$opciones_papel = array(
|
||||
'rotativa' => 1,
|
||||
);
|
||||
|
||||
$tipo = array();
|
||||
if ($paginas->color > 0) {
|
||||
$tipo = 'color';
|
||||
$opciones_papel['color'] = 1;
|
||||
}
|
||||
else {
|
||||
$opciones_papel['bn'] = 1;
|
||||
$tipo = 'negro';
|
||||
}
|
||||
|
||||
// Se obtienen los papeles disponibles
|
||||
$papelimpresionmodel = new PapelImpresionModel();
|
||||
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
|
||||
papel_generico_id: $papel_generico['id'],
|
||||
gramaje: $gramaje,
|
||||
options: $opciones_papel
|
||||
);
|
||||
|
||||
$lineas = array();
|
||||
// Para cada papel, se obtienen las maquinas disponibles
|
||||
foreach ($papeles as $papel) {
|
||||
|
||||
$papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel();
|
||||
if (is_null($datosTipolog)) {
|
||||
$datosTipologias = $papelImpresionTipologiaModel
|
||||
->findTipologiasForPapelImpresion($papel->id, $parametrosRotativa->colorPages > 0 ? 'color' : 'negro')
|
||||
->get()->getResultObject();
|
||||
|
||||
|
||||
if (count($datosTipologias) == 0) {
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$datosTipologias = $datosTipolog;
|
||||
}
|
||||
|
||||
$parametrosRotativa->rotativa_gota_negro = $datosTipologias[0]->gota_negro;
|
||||
$parametrosRotativa->rotativa_gota_color = $datosTipologias[0]->gota_color;
|
||||
$parametrosRotativa->rotativa_negro = $datosTipologias[0]->negro;
|
||||
$parametrosRotativa->rotativa_cyan = $datosTipologias[0]->cyan;
|
||||
$parametrosRotativa->rotativa_magenta = $datosTipologias[0]->magenta;
|
||||
$parametrosRotativa->rotativa_amarillo = $datosTipologias[0]->amarillo;
|
||||
|
||||
$maquinamodel = new MaquinaModel();
|
||||
|
||||
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
|
||||
is_rotativa: 1,
|
||||
tarifa_tipo: $tipo,
|
||||
uso_tarifa: $uso,
|
||||
tirada: $datosPedido->tirada + $datosPedido->merma,
|
||||
papel_impresion_id: $papel->id,
|
||||
);
|
||||
|
||||
$data['uso'] = $uso;
|
||||
$data['tipo'] = $tipo;
|
||||
$data['datosPedido'] = $datosPedido;
|
||||
$data['cliente_id'] = $cliente_id;
|
||||
$data['papel'] = $papel;
|
||||
$data['papel_generico'] = $papel_generico;
|
||||
$data['parametrosRotativa'] = $parametrosRotativa;
|
||||
$data['paginas'] = $paginas;
|
||||
$data['gramaje'] = $gramaje;
|
||||
|
||||
// Se recorren las máquinas y se calcula el coste de linea por cada una
|
||||
foreach ($maquinas as $maquina) {
|
||||
|
||||
$data['maquina'] = $maquina;
|
||||
|
||||
$linea = PresupuestoService::getLineaPresupuestoRotativa($data);
|
||||
|
||||
if(empty($linea))
|
||||
continue;
|
||||
|
||||
array_push($lineas, $linea);
|
||||
}
|
||||
}
|
||||
return $lineas;
|
||||
}
|
||||
|
||||
|
||||
// Funcion que obtiene el coste para impresión en plana
|
||||
// y devuelve un array con los datos de la lineas
|
||||
// Parametros de entrada: $input_data es un array con los siguientes datos:
|
||||
// - uso: 'interior', 'guardas', 'cubierta' o 'sobrecubierta'
|
||||
// - tipo_impresion_id: id del tipo de impresion
|
||||
// - datosPedido: un objeto que contiene los siguientes campos
|
||||
// * paginas: numero total de páginas
|
||||
// * tirada: numero de ejemplares a imprimir
|
||||
// * merma: número de ejemplares extra a imprimir
|
||||
// * ancho: ancho del libro
|
||||
// * alto: alto del libro
|
||||
// * a_favor_fibra: dirección de la impresión
|
||||
// * isCosido: indica si el libro es cosido o no
|
||||
// * solapas: (solo cubierta y sobrecubierta) indica si hay o no solapas
|
||||
// * solapas_ancho: (solo cubierta y sobrecubierta) indica el ancho de las solapas
|
||||
// * lomo: (solo cubierta y sobrecubierta) ancho del lomo del libro (o libro mas cubierta)
|
||||
// - papel_generico: objeto que contiene el id y el nombre del papel generico
|
||||
// - gramaje: gramaje del papel seleccionado
|
||||
// - cliente_id: id del cliente al que va destinado el presupuesto
|
||||
// - datosTipolog: datos referentes a las tintas (opcional)
|
||||
// - a_favor_fibra: dirección de la impresión
|
||||
public static function obtenerComparadorPlana($input_data){
|
||||
|
||||
$uso = $input_data['uso'];
|
||||
$tipo_impresion_id = $input_data['tipo_impresion_id'];
|
||||
$datosPedido = $input_data['datosPedido'];
|
||||
$papel_generico = $input_data['papel_generico'];
|
||||
$gramaje = $input_data['gramaje'];
|
||||
$isColor = $input_data['isColor'];
|
||||
$isHq = $input_data['isHq'];
|
||||
$cliente_id = $input_data['cliente_id'];
|
||||
$datosTipolog = $input_data['datosTipolog'] ?? null;
|
||||
$a_favor_fibra = $datosPedido->a_favor_fibra ?? false;
|
||||
|
||||
$tipo = $isColor ? ($isHq ? 'colorhq' : 'color') : ($isHq ? 'negrohq' : 'negro');
|
||||
|
||||
if ($uso == 'cubierta' || $uso == 'sobrecubierta') {
|
||||
|
||||
$datosPedido->anchoExteriores = PresupuestoService::getAnchoTotalExteriores($uso, $tipo_impresion_id, $datosPedido);
|
||||
$datosPedido->altoExteriores = PresupuestoService::getAltoTotalExteriores($uso, $tipo_impresion_id, $datosPedido);
|
||||
}
|
||||
|
||||
$opciones_papel = PresupuestoService::get_opciones_papel($uso, $isColor);
|
||||
|
||||
// Se obtienen los papeles disponibles
|
||||
$papelimpresionmodel = new PapelImpresionModel();
|
||||
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
|
||||
papel_generico_id: $papel_generico['id'],
|
||||
gramaje: $gramaje,
|
||||
options: $opciones_papel
|
||||
);
|
||||
|
||||
$lineas = array();
|
||||
// Para cada papel, se obtienen las maquinas disponibles
|
||||
foreach ($papeles as $papel) {
|
||||
|
||||
$maquinamodel = new MaquinaModel();
|
||||
$maquinas = $maquinamodel->getMaquinaImpresionForPresupuesto(
|
||||
is_rotativa: 0,
|
||||
tarifa_tipo: $tipo,
|
||||
uso_tarifa: ($uso == 'guardas') ? 'interior' : $uso,
|
||||
tirada: $datosPedido->tirada + $datosPedido->merma,
|
||||
papel_impresion_id: $papel->id,
|
||||
);
|
||||
|
||||
// Se recorren las máquinas y se calcula el coste de linea por cada una
|
||||
foreach ($maquinas as $maquina) {
|
||||
|
||||
|
||||
$data['uso'] = $uso;
|
||||
$data['tipo'] = $tipo;
|
||||
$data['datosPedido'] = $datosPedido;
|
||||
$data['cliente_id'] = $cliente_id;
|
||||
$data['papel'] = $papel;
|
||||
$data['opciones_papel'] = $opciones_papel;
|
||||
$data['maquina'] = $maquina;
|
||||
$data['papel_generico'] = $papel_generico;
|
||||
$data['isColor'] = $isColor;
|
||||
$data['a_favor_fibra'] = $a_favor_fibra;
|
||||
$data['datosTipolog'] = $datosTipolog;
|
||||
$data['gramaje'] = $gramaje;
|
||||
|
||||
$linea = PresupuestoService::getLineaPresupuestoPlana($data);
|
||||
|
||||
if(empty($linea))
|
||||
continue;
|
||||
|
||||
array_push($lineas, $linea);
|
||||
}
|
||||
}
|
||||
return $lineas;
|
||||
}
|
||||
|
||||
|
||||
// Funcion que comprueba si existe una maquina
|
||||
private static function checkMaquina($maquina_id){
|
||||
|
||||
$maquina = (new MaquinaModel())->find($maquina_id);
|
||||
if (!$maquina) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// Funcion que comprueba si existe un papel de impresion
|
||||
private static function checkPapelImpresion($papel_impresion_id){
|
||||
|
||||
$papel = (new PapelImpresionModel())->find($papel_impresion_id);
|
||||
if (!$papel) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Devuelve la dimensión del lomo interior.
|
||||
*/
|
||||
|
||||
@ -27,7 +27,7 @@ function asyncMessageDialog(title, msg, callback) {
|
||||
$("#labelMsgMessageDialog").html(msg);
|
||||
$("#okButton").off('click').click(function () {
|
||||
callback();
|
||||
$confirmDialog.modal("hide");
|
||||
$messageDialog.modal("hide");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@
|
||||
<th><?= lang('MaquinasTarifasImpresions.tipo') ?></th>
|
||||
<th><?= lang('MaquinasTarifasImpresions.precio') ?></th>
|
||||
<th><?= lang('MaquinasTarifasImpresions.margen') ?></th>
|
||||
<th>is_deleted</th>
|
||||
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -489,6 +490,7 @@
|
||||
},
|
||||
{ 'data': 'precio' },
|
||||
{ 'data': 'margen' },
|
||||
{ 'data': 'is_deleted',},
|
||||
{
|
||||
data: actionBtns,
|
||||
className: 'row-edit dt-center'
|
||||
@ -496,6 +498,10 @@
|
||||
|
||||
],
|
||||
columnDefs: [
|
||||
{
|
||||
target: 4,
|
||||
visible: false
|
||||
},
|
||||
{
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
|
||||
@ -390,11 +390,11 @@ function get_datos_acabado(){
|
||||
values['tarifa_id'] = $(this).text()
|
||||
break
|
||||
case 1:
|
||||
if($(this).text().includes(' '+ window.Presupuestos.cubierta))
|
||||
if($(this).text().includes(window.Presupuestos.cubierta))
|
||||
values['cubierta'] = 1
|
||||
else
|
||||
values['cubierta'] = 0
|
||||
if($(this).text().includes(' '+ window.Presupuestos.sobrecubierta))
|
||||
if($(this).text().includes(window.Presupuestos.sobrecubierta))
|
||||
values['sobrecubierta'] = 1
|
||||
else
|
||||
values['sobrecubierta'] = 0
|
||||
@ -527,6 +527,8 @@ function init_servicio_encuadernado(){
|
||||
|
||||
data: function (params) {
|
||||
|
||||
const dimension = getDimensionLibro();
|
||||
|
||||
if(parseInt($('#tirada').val())>0){
|
||||
var tirada = parseInt($('#tirada').val())
|
||||
}
|
||||
@ -538,8 +540,8 @@ function init_servicio_encuadernado(){
|
||||
tarifa_id: tarifa_id,
|
||||
paginas: parseInt($('#paginas').val())>0?parseInt($('#paginas').val()):0,
|
||||
tirada: tirada,
|
||||
ancho: ancho_libro,
|
||||
alto: alto_libro,
|
||||
ancho: dimension.ancho,
|
||||
alto: dimension.alto,
|
||||
searchtxt: params.term, // search term
|
||||
};
|
||||
return_data = Object.assign(return_data, window.token_ajax);
|
||||
@ -1509,4 +1511,24 @@ async function actualizar_servicios(update_preimpresion=false){
|
||||
)
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
function popAlert(message, alertClass, alertIcon, containerId = 'sk-alert'){
|
||||
var htmlString = `
|
||||
<div class="alert ${alertClass} d-flex align-items-baseline" role="alert">
|
||||
<span class="alert-icon alert-icon-lg text-primary me-2">
|
||||
<i class="ti ${alertIcon} ti-sm"></i>
|
||||
</span>
|
||||
<div class="d-flex flex-column ps-1">
|
||||
<h5 class="alert-heading mb-2">${message}</h5>
|
||||
</div>
|
||||
</div>`;
|
||||
if(containerId == 'sk-alert'){
|
||||
$(window).scrollTop(0);
|
||||
}
|
||||
$('#' + containerId).hide().empty().html(htmlString).fadeIn("slow", function(){
|
||||
setTimeout(function(){
|
||||
$('#' + containerId).fadeOut("slow");
|
||||
}, 5000);
|
||||
});
|
||||
}
|
||||
@ -245,7 +245,7 @@
|
||||
|
||||
window.routes_servicios = {
|
||||
dataTableOfPresupuestoAcabados: "<?=route_to('dataTableOfPresupuestoAcabados') ?>",
|
||||
dataTableOfPresupuestoPreimpresion: "<?=route_to('dataTableOfPresupuestoPreimpresion') ?>",
|
||||
dataTableOfPresupuestoPreimpresion: "<?=route_to('dataTableOfPresupuestoPreimpresiones') ?>",
|
||||
dataTableOfPresupuestoEncuadernaciones: "<?=route_to('dataTableOfPresupuestoEncuadernaciones') ?>",
|
||||
dataTableOfPresupuestoManipulados: "<?=route_to('dataTableOfPresupuestoManipulados') ?>",
|
||||
menuItemsOfPresupuestoEncuadernaciones: '<?= route_to("menuItemsOfPresupuestoEncuadernaciones") ?>',
|
||||
|
||||
@ -2977,7 +2977,7 @@ function clear_lp_rot_bn(clear_selectors){
|
||||
$(".lp-rot-bn-input" ).val("0")
|
||||
$("#lp_rot_bn_paginas" ).val(pags)
|
||||
if(clear_selectors)
|
||||
$( ".lp-rotbn-select").empty()
|
||||
$( ".lp-rot-bn-select").empty()
|
||||
}
|
||||
|
||||
|
||||
@ -3324,7 +3324,7 @@ function clear_lp_rot_color(clear_selectors){
|
||||
$(".lp-rot-color-input" ).val("0")
|
||||
$("#lp_rot_color_paginas" ).val(pags)
|
||||
if(clear_selectors)
|
||||
$( ".lp-rotcolor-select").empty()
|
||||
$( ".lp-rot-color-select").empty()
|
||||
}
|
||||
|
||||
|
||||
@ -4001,7 +4001,7 @@ async function calcularPresupuesto_sobrecubierta(fromComparador=false, input_dat
|
||||
merma: parseInt($('#mermacubierta').val()),
|
||||
ancho: dimension.ancho,
|
||||
alto: dimension.alto,
|
||||
lomo: getLomoLineasPresupuesto() + getLomoCubiertaLineasPresupuesto,
|
||||
lomo: getLomoLineasPresupuesto() + getLomoCubiertaLineasPresupuesto(),
|
||||
papel_generico_id: input_data.papel_generico_id,
|
||||
papel_generico: input_data.papel_generico,
|
||||
gramaje: input_data.gramaje,
|
||||
@ -4137,6 +4137,7 @@ function getLomoLineasPresupuesto(){
|
||||
catch(error){
|
||||
lomoTotal = 0
|
||||
}
|
||||
$('#lomo_cubierta').val(lomoTotal)
|
||||
return lomoTotal
|
||||
}
|
||||
|
||||
@ -4152,6 +4153,7 @@ function getLomoCubiertaLineasPresupuesto(){
|
||||
catch(error){
|
||||
lomoTotal = 0
|
||||
}
|
||||
$('#lomo_sobrecubierta').val(lomoTotal+parseFloat($('#lomo_cubierta').val()))
|
||||
return lomoTotal
|
||||
}
|
||||
|
||||
|
||||
@ -59,19 +59,24 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
|
||||
|
||||
var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100.0)?0:margenPapel/(totalPapel)*100.0
|
||||
$('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%')
|
||||
$('#totalCostePapel').text(totalPapel.toFixed(2)+ '€')
|
||||
$('#margenPapel').text(margenPapel.toFixed(2) + '€')
|
||||
|
||||
$('#totalCostePapel').text((addSeparatorsNF(totalPapel.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#margenPapel').text((addSeparatorsNF(margenPapel.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalCostePapel').attr('val',totalPapel.toFixed(2))
|
||||
$('#margenPapel').attr('val',margenPapel.toFixed(2))
|
||||
|
||||
var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresion)*100.0)?0:margenImpresion/(totalImpresion)*100.0
|
||||
$('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%')
|
||||
$('#totalCosteImpresion').text(totalImpresion.toFixed(2) + '€')
|
||||
$('#margenImpresion').text(margenImpresion.toFixed(2) + '€')
|
||||
$('#totalCosteImpresion').text((addSeparatorsNF(totalImpresion.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#margenImpresion').text((addSeparatorsNF(margenImpresion.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalCosteImpresion').attr('val',totalImpresion.toFixed(2))
|
||||
$('#margenImpresion').attr('val',margenImpresion.toFixed(2))
|
||||
|
||||
}
|
||||
else{
|
||||
totalPapel = parseFloat($('#totalCostePapel').text().replace('€', ''))
|
||||
margenPapel = parseFloat($('#margenPapel').text().replace('€', ''))
|
||||
totalImpresion = parseFloat($('#totalCosteImpresion').text().replace('€', ''))
|
||||
margenImpresion = parseFloat($('#margenImpresion').text().replace('€', ''))
|
||||
totalPapel = parseFloat($('#totalCostePapel').attr('val'))
|
||||
margenPapel = parseFloat($('#margenPapel').attr('val'))
|
||||
totalImpresion = parseFloat($('#totalCosteImpresion').attr('val'))
|
||||
margenImpresion = parseFloat($('#margenImpresion').attr('val'))
|
||||
}
|
||||
|
||||
sumForFactorPonderado = sumForFactor;
|
||||
@ -126,14 +131,16 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
|
||||
|
||||
var porcentajeMargenServicios = margenServicios/(margenServicios+totalServicios)*100
|
||||
$('#porcentajeMargenServicios').text(isNaN(porcentajeMargenServicios.toFixed(0))?0:porcentajeMargenServicios.toFixed(0) + '%')
|
||||
$('#totalServicios').text(totalServicios.toFixed(2) + '€')
|
||||
$('#margenServicios').text(margenServicios.toFixed(2) + '€')
|
||||
$('#totalServicios').text((addSeparatorsNF(totalServicios.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#margenServicios').text((addSeparatorsNF(margenServicios.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalServicios').attr('val',totalServicios.toFixed(2) + '€')
|
||||
$('#margenServicios').attr('val',margenServicios.toFixed(2) + '€')
|
||||
|
||||
}
|
||||
else{
|
||||
|
||||
totalServicios = parseFloat($('#totalServicios').text().replace('€', ''))
|
||||
margenServicios = parseFloat($('#margenServicios').text().replace('€', ''))
|
||||
totalServicios = parseFloat($('#totalServicios').attr('val'))
|
||||
margenServicios = parseFloat($('#margenServicios').attr('val'))
|
||||
|
||||
sumForFactorPonderado += totalServicios;
|
||||
}
|
||||
@ -149,18 +156,22 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
|
||||
}
|
||||
|
||||
totalEnvios -= margenEnvios
|
||||
$('#totalEnvios').text(totalEnvios.toFixed(2) + '€')
|
||||
$('#margenEnvios').text(margenEnvios.toFixed(2) + '€')
|
||||
$('#totalEnvios').text((addSeparatorsNF(totalEnvios.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#margenEnvios').text((addSeparatorsNF(margenEnvios.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalEnvios').attr('val',totalEnvios.toFixed(2) + '€')
|
||||
$('#margenEnvios').attr('val',margenEnvios.toFixed(2) + '€')
|
||||
}
|
||||
else{
|
||||
totalEnvios = parseFloat($('#totalEnvios').text().replace('€', ''))
|
||||
margenEnvios = parseFloat($('#margenEnvios').text().replace('€', ''))
|
||||
totalEnvios = parseFloat($('#totalEnvios').attr('val'))
|
||||
margenEnvios = parseFloat($('#margenEnvios').attr('val'))
|
||||
}
|
||||
|
||||
var totalCostes = totalPapel + totalImpresion + totalServicios + totalEnvios
|
||||
var totalMargenes = margenPapel + margenImpresion + margenServicios + margenEnvios
|
||||
$('#totalCostes').text((totalCostes).toFixed(2) + '€')
|
||||
$('#totalMargenes').text((totalMargenes).toFixed(2) + '€')
|
||||
$('#totalCostes').text((addSeparatorsNF(totalCostes.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalMargenes').text((addSeparatorsNF(totalMargenes.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalCostes').attr('val',(totalCostes).toFixed(2) + '€')
|
||||
$('#totalMargenes').attr('val',(totalMargenes).toFixed(2) + '€')
|
||||
|
||||
if($('#total_descuentoPercent').val()<0){
|
||||
$('#total_descuentoPercent').val(0)
|
||||
@ -170,40 +181,64 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){
|
||||
var totalPresupuesto = totalAntesDescuento - totalDescuento
|
||||
var precioUnidad = totalPresupuesto/parseInt($('#tirada').val())
|
||||
|
||||
$('#totalAntesDescuento').text((totalAntesDescuento).toFixed(2) + '€')
|
||||
$('#descuentoTotal').text((totalDescuento).toFixed(2) + '€')
|
||||
$('#totalDespuesDecuento').text((totalPresupuesto).toFixed(2) + '€')
|
||||
$('#precioUnidadPresupuesto').text((precioUnidad).toFixed(2) + '€')
|
||||
$('#totalAntesDescuento').text((addSeparatorsNF(totalAntesDescuento.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#descuentoTotal').text((addSeparatorsNF(totalDescuento.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#totalDespuesDecuento').text((addSeparatorsNF(totalPresupuesto.toFixed(2), ".", ",", ".")) + "€")
|
||||
$('#precioUnidadPresupuesto').text((addSeparatorsNF(precioUnidad.toFixed(4), ".", ",", ".")) + "€")
|
||||
$('#totalAntesDescuento').attr('val',(totalAntesDescuento).toFixed(2))
|
||||
$('#descuentoTotal').attr('val',(totalDescuento).toFixed(2))
|
||||
$('#totalDespuesDecuento').attr('val',(totalPresupuesto).toFixed(2))
|
||||
$('#precioUnidadPresupuesto').attr('val',(precioUnidad).toFixed(4))
|
||||
|
||||
$('#factor').text(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactor).toFixed(2))
|
||||
$('#factor_ponderado').text(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactorPonderado).toFixed(2))
|
||||
|
||||
$('#factor').text(addSeparatorsNF(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactor).toFixed(2), ".", ",", "."))
|
||||
$('#factor').attr('val', ((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactor).toFixed(2))
|
||||
$('#factor_ponderado').text(addSeparatorsNF(((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactorPonderado).toFixed(2), ".", ",", "."))
|
||||
$('#factor_ponderado').attr('val',((totalPresupuesto-totalEnvios-margenEnvios)/sumForFactorPonderado).toFixed(2))
|
||||
}
|
||||
|
||||
|
||||
function addSeparatorsNF(nStr, inD, outD, sep)
|
||||
{
|
||||
nStr += '';
|
||||
var dpos = nStr.indexOf(inD);
|
||||
var nStrEnd = '';
|
||||
if (dpos != -1) {
|
||||
nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
|
||||
nStr = nStr.substring(0, dpos);
|
||||
}
|
||||
var rgx = /(\d+)(\d{3})/;
|
||||
while (rgx.test(nStr)) {
|
||||
nStr = nStr.replace(rgx, '$1' + sep + '$2');
|
||||
}
|
||||
return nStr + nStrEnd;
|
||||
}
|
||||
|
||||
function getValuesResumenForm(){
|
||||
var formResumen = ""
|
||||
formResumen += '&total_coste_papel=' + $('#totalCostePapel').text().replace('€', '')
|
||||
formResumen += '&total_margen_papel=' + $('#margenPapel').text().replace('€', '')
|
||||
formResumen += '&total_coste_papel=' + $('#totalCostePapel').attr('val')
|
||||
formResumen += '&total_margen_papel=' + $('#margenPapel').attr('val')
|
||||
formResumen += '&total_margenPercent_papel=' + $('#porcentajeMargenPapel').text().replace('%', '')
|
||||
|
||||
formResumen += '&total_coste_impresion=' + $('#totalCosteImpresion').text().replace('€', '')
|
||||
formResumen += '&total_margen_impresion=' + $('#margenImpresion').text().replace('€', '')
|
||||
formResumen += '&total_coste_impresion=' + $('#totalCosteImpresion').attr('val')
|
||||
formResumen += '&total_margen_impresion=' + $('#margenImpresion').attr('val')
|
||||
formResumen += '&total_margenPercent_impresion=' + $('#porcentajeMargenImpresion').text().replace('%', '')
|
||||
|
||||
formResumen += '&total_coste_servicios=' + $('#totalServicios').text().replace('€', '')
|
||||
formResumen += '&total_margen_servicios=' + $('#margenServicios').text().replace('€', '')
|
||||
formResumen += '&total_coste_servicios=' + $('#totalServicios').attr('val')
|
||||
formResumen += '&total_margen_servicios=' + $('#margenServicios').attr('val')
|
||||
formResumen += '&total_margenPercent_servicios=' + $('#porcentajeMargenServicios').text().replace('%', '')
|
||||
|
||||
formResumen += '&total_coste_envios=' + $('#totalEnvios').text().replace('€', '')
|
||||
formResumen += '&total_margen_envios=' + $('#margenEnvios').text().replace('€', '')
|
||||
formResumen += '&total_coste_envios=' + $('#totalEnvios').attr('val')
|
||||
formResumen += '&total_margen_envios=' + $('#margenEnvios').attr('val')
|
||||
|
||||
formResumen += '&total_costes=' + $('#totalCostes').text().replace('€', '')
|
||||
formResumen += '&total_margenes=' + $('#totalMargenes').text().replace('€', '')
|
||||
formResumen += '&total_costes=' + $('#totalCostes').attr('val')
|
||||
formResumen += '&total_margenes=' + $('#totalMargenes').attr('val')
|
||||
|
||||
formResumen += '&total_antes_descuento=' + $('#totalAntesDescuento').text().replace('€', '')
|
||||
formResumen += '&total_descuento=' + $('#descuentoTotal').text().replace('€', '')
|
||||
formResumen += '&total_antes_descuento=' + $('#totalAntesDescuento').attr('val')
|
||||
formResumen += '&total_descuento=' + $('#descuentoTotal').attr('val')
|
||||
formResumen += '&total_descuentoPercent=' + $('#total_descuentoPercent').val()
|
||||
formResumen += '&total_presupuesto=' + $('#totalDespuesDecuento').text().replace('€', '')
|
||||
formResumen += '&total_precio_unidad=' + $('#precioUnidadPresupuesto').text().replace('€', '')
|
||||
formResumen += '&total_presupuesto=' + $('#totalDespuesDecuento').attr('val')
|
||||
formResumen += '&total_precio_unidad=' + $('#precioUnidadPresupuesto').attr('val')
|
||||
|
||||
formResumen += '&total_factor=' + $('#total_factor').text()
|
||||
formResumen += '&total_factor_ponderado=' + $('#total_factor_ponderado').text()
|
||||
|
||||
@ -157,7 +157,7 @@ async function add_tirada_alternativa(tirada_alt) {
|
||||
coste_envio: coste_envio.toFixed(2),
|
||||
margen: ((margen_total + margen_servicios + margen_envio)/(coste_total+coste_envio)*100.0).toFixed(2),
|
||||
total_pedido: (coste_total + costes_servicios + coste_envio).toFixed(2),
|
||||
precio_unidad: ((coste_total + costes_servicios + coste_envio) / datos.tirada).toFixed(2),
|
||||
precio_unidad: ((coste_total + costes_servicios + coste_envio) / datos.tirada).toFixed(4),
|
||||
|
||||
}).draw(false);
|
||||
}
|
||||
|
||||
@ -17,6 +17,10 @@
|
||||
value="<?= $presupuestoEntity->id ?>"></input>
|
||||
<input type="hidden" name="tipo_impresion_id" id="tipo_impresion_id" class="form-control"
|
||||
value="<?= $tipo_impresion_id ?>"></input>
|
||||
<input type="hidden" name="lomo_cubierta" id="lomo_cubierta" class="form-control"
|
||||
value="<?= is_null($presupuestoEntity->lomo_cubierta)?0:$presupuestoEntity->lomo_cubierta ?>"></input>
|
||||
<input type="hidden" name="lomo_sobrecubierta" id="lomo_sobrecubierta" class="form-control"
|
||||
value="<?= is_null($presupuestoEntity->lomo_sobrecubierta)?0:$presupuestoEntity->lomo_sobrecubierta ?>"></input>
|
||||
<input type="hidden" name="isCosido" id="isCosido" class="form-control"
|
||||
value="<?= $isCosido ?>"></input>
|
||||
<input type="hidden" name="POD" id="POD" class="form-control"
|
||||
@ -81,6 +85,13 @@
|
||||
})
|
||||
|
||||
if(gotaNegro){
|
||||
const domain = window.location.origin
|
||||
const url = window.location.href;
|
||||
const url_parts = url.split('/');
|
||||
var id = -1;
|
||||
if(url_parts[url_parts.length-2] == 'edit'){
|
||||
id = url_parts[url_parts.length-1];
|
||||
}
|
||||
asyncMessageDialog('<?= lang("Basic.global.Warning") ?>', '<?= lang("Presupuestos.duplicarConTipologias") ?>', function() {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
@ -291,9 +302,36 @@
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if (str_contains($formAction, 'edit')): ?>
|
||||
<?= $this->section("additionalInlineJs") ?>
|
||||
if(<?php echo $presupuestoEntity->is_duplicado?'true':'false'; ?>){
|
||||
asyncMessageDialog(
|
||||
'<?= lang("Basic.global.Warning") ?>',
|
||||
'<?= lang("Presupuestos.presupuestoDuplicadoActualizacion") ?>',
|
||||
function(){});
|
||||
}
|
||||
else if(<?php echo ($presupuestoEntity->cambios_lineas? 'true':'false'); ?> ||
|
||||
<?php echo ($presupuestoEntity->cambios_servicios? 'true':'false'); ?> ||
|
||||
<?php echo ($presupuestoEntity->cambios_envios ? 'true':'false'); ?>){
|
||||
|
||||
let text = '<?= lang("Presupuestos.actualizacionPrecios") ?>';
|
||||
if(<?php echo ($presupuestoEntity->cambios_lineas ? 'true':'false'); ?>){
|
||||
text += '<?= lang("Presupuestos.actualizacionPreciosLP") ?>';
|
||||
}
|
||||
else if (<?php echo ($presupuestoEntity->cambios_servicios ? 'true':'false'); ?>){
|
||||
text += '<?= lang("Presupuestos.actualizacionPreciosServicios") ?>';
|
||||
}
|
||||
else if (<?php echo ($presupuestoEntity->cambios_envios ? 'true':'false'); ?>){
|
||||
text += '<?= lang("Presupuestos.actualizacionPreciosEnvios") ?>';
|
||||
}
|
||||
asyncMessageDialog(
|
||||
'<?= lang("Basic.global.Warning") ?>',
|
||||
text,
|
||||
function(){});
|
||||
|
||||
|
||||
|
||||
}
|
||||
<?= $this->endSection() ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<!------------------------------------------->
|
||||
<!-- Variables generales usadas en los ficheros js -->
|
||||
|
||||
Reference in New Issue
Block a user