mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
acabado actualizar lineas presupuesto
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;
|
||||
}
|
||||
@ -351,10 +358,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
$this->viewData['presupuestoEntity']->cambios_lineas=true;
|
||||
}
|
||||
// Tarifas
|
||||
$this->viewData['serviciosAcabado'] = $this->getServiciosAcabado();
|
||||
$this->viewData['serviciosPreimpresion'] = $this->getServiciosPreimpresion();
|
||||
$this->viewData['serviciosEncuadernacion'] = $this->getServiciosEncuadernacion();
|
||||
$this->viewData['serviciosManipulado'] = $this->getServiciosManipulado();
|
||||
$this->viewData['serviciosAcabado'] = $this->getServiciosAcabado();
|
||||
|
||||
[$cambios_en_servicios, $servicios] = $this->getLineasServicios($presupuestoEntity);
|
||||
|
||||
$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();
|
||||
@ -380,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(...)
|
||||
@ -834,6 +849,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
$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');
|
||||
@ -1326,4 +1342,41 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,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",
|
||||
@ -149,5 +150,6 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
||||
"total_factor_ponderado" => "?float",
|
||||
"acabado_cubierta_id" => "int",
|
||||
"acabado_sobrecubierta_id" => "int",
|
||||
"is_duplicado" => "boolean",
|
||||
];
|
||||
}
|
||||
|
||||
@ -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];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -105,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";
|
||||
|
||||
@ -264,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.
|
||||
@ -299,6 +307,4 @@ class PresupuestoModel extends \App\Models\GoBaseModel
|
||||
|
||||
return $builder;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -11,8 +11,15 @@ 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\Tarifas\TarifaEncuadernacionModel;
|
||||
|
||||
class PresupuestoService extends BaseService
|
||||
{
|
||||
/**
|
||||
@ -1119,6 +1126,192 @@ class PresupuestoService extends BaseService
|
||||
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) {
|
||||
$count = 0;
|
||||
$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];
|
||||
}
|
||||
|
||||
// Funcion que comprueba si existe una maquina
|
||||
private static function checkMaquina($maquina_id){
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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") ?>',
|
||||
|
||||
Reference in New Issue
Block a user