trabajando en añadir tiradas alternativas

This commit is contained in:
2025-01-14 20:33:55 +01:00
parent 28a133f687
commit a4394ed470
20 changed files with 934 additions and 559 deletions

View File

@ -73,17 +73,8 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$datos_tarifas = $postData['datos'] ?? [];
$tirada = $postData['tirada'] ?? 0;
$POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$result = [];
if (count($datos_tarifas) > 0) {
foreach ($datos_tarifas as $tarifa) {
$proveedor = $tarifa['proveedor_id'] == '' ? -1 : $tarifa['proveedor_id'];
$values = $this->model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $proveedor, $POD);
$values[0]->cubierta = $tarifa['cubierta'] ?? 0;
$values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0;
array_push($result, $values[0]);
}
}
$result = $this->getServiciosAcabados($datos_tarifas, $tirada, $POD);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -95,6 +86,23 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
return $this->respond($data);
}
public function getServiciosAcabados($datos_tarifas, $tirada, $POD){
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
$result = [];
if (count($datos_tarifas) > 0) {
foreach ($datos_tarifas as $tarifa) {
$proveedor = $tarifa['proveedor_id'] == '' ? -1 : $tarifa['proveedor_id'];
$values = $model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $proveedor, $POD);
$values[0]->cubierta = $tarifa['cubierta'] ?? 0;
$values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0;
array_push($result, $values[0]);
}
}
return $result;
}
public function cargar()
{
if($this->request->isAJAX()) {

View File

@ -517,6 +517,12 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id);
}
$data['comentarios_cliente'] = $presupuesto->comentarios_cliente;
$data['comentarios_safekat'] = $presupuesto->comentarios_safekat;
$data['comentarios_presupuesto'] = $presupuesto->comentarios_presupuesto;
$data['comentarios_produccion'] = $presupuesto->comentarios_produccion;
$data['tiradasAlternativas'] = json_decode($presupuesto->tirada_alternativa_json_data);
/*

View File

@ -126,6 +126,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['POD'] = $POD;
$this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
$this->viewData['eb'] = 0;
$this->viewData['boxTitle'] = lang('Basic.global.addNew') . ' ' . $this->viewData['pageTitle'] . ' ' . lang('Basic.global.addNewSuffix');
@ -166,6 +167,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['POD'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
$this->viewData['eb'] = $presupuestoEntity->envio_base;
// 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) {
@ -384,7 +387,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$guardas = PresupuestoClienteService::obtenerGuardas($input_data);
foreach ($guardas as $linea) {
if (count($linea) > 0) {
$lomo += floatval($linea['mano']);
@ -403,20 +406,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($tipo == 'cosido' || $tipo == 'fresado') {
if ($lomo < $lomo_minimo_fresado_cosido) {
$errors['status'] = 1;
$errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a '
. $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
"Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.";
$errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a '
. $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
"Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.";
}
if ($lomo > $lomo_maximo) {
$errors['status'] = 1;
$errors['value'] = 'No se pueden encuadernar con un lomo superior a '
. $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
"Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.";
$errors['value'] = 'No se pueden encuadernar con un lomo superior a '
. $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
"Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.";
}
}
$data = (object) array('lomo' => $lomo,
'errors' => $errors);
$data = (object) array(
'lomo' => $lomo,
'errors' => $errors
);
return $this->respond($data);
} else {
@ -439,6 +444,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$cliente_id = $reqData['clienteId'] ?? -1;
$tirada = $reqData['tirada'] ?? 0;
$selectedTirada = $reqData['selectedTirada'] ?? -1;
$tamanio = $reqData['tamanio'];
$paginas = $reqData['paginas'] ?? 0;
$paginas_color = $reqData['paginasColor'] ?? 0;
@ -551,21 +557,67 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
);
}
if (count($direcciones) > 1) {
// calculo del envio base (tirada_maxima)
$return_data['eb'] = [];
for ($i = 0; $i < count($tirada); $i++) {
$direccion = [];
$coste_direccion = $this->getCosteEnvio(
$direccion,
$return_data['peso'][$i],
$tirada[$i],
false,
true
);
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = 'Sin direccion';
$data['peso'] = $return_data['peso'][$i];
$data['palets'] = 'Sin direccion';
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
} else {
$return_data['eb'][$i] = round($coste_direccion->coste, 2);
}
}
$envio_base = true;
if (count($direcciones) > 0) {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$primer_envio = false;
foreach ($direcciones as $direccion) {
// El primer envio no se calcula ya que se añade el base
if ($envio_base) {
//aporte del envio al precio unidad
$coste_envio += ($return_data['eb'][$i] / $tirada[$i]);
$envio_base = false;
continue;
}
if($selectedTirada > 0){
$unidades = floor($direccion['unidades'] * $tirada[$i] / $selectedTirada);
}
else{
$unidades = $direccion['unidades'];
}
$coste_direccion = $this->getCosteEnvio(
$direccion['id'],
$direccion['direccion'],
$return_data['peso'][$i],
!$primer_envio ? intval($tirada[$i]) : $direccion['unidades'],
$direccion['entregaPalets'] == 'true' ? 1 : 0
)[0];
$primer_envio = true;
$unidades,
$direccion['entregaPalets'] == 'true' ? 1 : 0,
false,
);
if (!property_exists($coste_direccion, 'coste')) {
@ -586,43 +638,22 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
];
return $return_data;
} else {
$coste_envio += $coste_direccion->coste;
//aporte del envio al precio unidad
$coste_envio += ($coste_direccion->coste / $tirada[$i]);
}
}
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4);
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4);
}
} else {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$coste_direccion = $this->getCosteEnvio(null, $return_data['peso'][$i], $tirada[$i], false)[0];
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = 'Sin direccion';
$data['peso'] = $return_data['peso'][$i];
$data['palets'] = 'Sin direccion';
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$return_data = [
'errors' => (object) ([
'status' => 1
]),
];
return $return_data;
} else {
$coste_envio += $coste_direccion->coste;
}
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio / $tirada[$i], 4);
$coste_envio += ($return_data['eb'][$i] / $tirada[$i]);
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4);
}
}
return $this->respond($return_data);
} catch (Exception $e) {
return $this->failServerError($e->getMessage() . ' - ' . $e->getFile() . ' - ' . $e->getLine());
@ -708,16 +739,15 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$anchoTotal = 0;
if(count($interior) == 2) {
if(count($interior[0]) > 0)
$anchoTotal += $interior[0]['mano'];
if(count($interior[1]) > 0)
if (count($interior) == 2) {
if (count($interior[0]) > 0)
$anchoTotal += $interior[0]['mano'];
if (count($interior[1]) > 0)
$anchoTotal += $interior[1]['mano'];
}
else{
if(count($interior) > 0)
$anchoTotal += $interior['mano'];
} else {
if (count($interior) > 0)
$anchoTotal += $interior['mano'];
}
@ -900,17 +930,20 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datosCabecera = $reqData['datosCabecera'] ?? [];
$confirmar = $reqData['confirmar'] ?? 0;
$confirmar = intval($confirmar);
$cliente_id = $reqData['clienteId'] ?? -1;
$tirada = $reqData['tirada'] ?? 0;
$tirada = $reqData['tirada'] ?? [];
$selected_tirada = $reqData['selectedTirada'] ?? 0;
$tamanio = $reqData['tamanio'];
$paginas = $reqData['paginas'] ?? 0;
$paginas_color = $reqData['paginasColor'] ?? 0;
$envio_base = $reqData['eb'] ?? 0;
$posPaginasColor = $reqData['posPaginasColor'] ?? "";
$paginasColorConsecutivas = $reqData['pagColorConsecutivas'] ?? 0;
$papelInteriorDiferente = $reqData['papelInteriorDiferente'] ?? 0;
@ -1038,43 +1071,120 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// seleccionamos el peso de la tirada seleccionada
$peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)];
// calculo del envio base (tirada_maxima)
$resultado_presupuesto['eb'] = [];
$datos_presupuesto['envio_base'] = 0;
for ($i = 0; $i < count($tirada); $i++) {
$direccion = [];
$coste_direccion = $this->getCosteEnvio(
$direccion,
$resultado_presupuesto['peso'][$i],
$tirada[$i],
false,
true
);
if (count($direcciones) > 1) {
for ($i = 0; $i < count($tirada); $i++) {
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0;
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0;
$coste_envio = 0.0;
foreach ($direcciones as $direccion) {
$precio_envio = $this->getCosteEnvio(
$direccion['id'],
$resultado_presupuesto['peso'][$i],
$direccion['unidades'],
$direccion['entregaPalets'] == 'true' ? 1 : 0
)[0];
$coste_envio += $precio_envio->coste;
$margen_envio = $precio_envio->margen;
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_envio - $margen_envio;
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $margen_envio;
}
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4);
if(intval($selected_tirada) == intval($tirada[$i])){
$datos_presupuesto['envio_base'] = round($coste_direccion->coste*(1 + $coste_direccion->margen/100.0), 2) ;
}
} else {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$precio_envio = $this->getCosteEnvio(null, $resultado_presupuesto['peso'][$i], $tirada[$i], false)[0];
$coste_envio += $precio_envio->coste;
$margen_envio = $precio_envio->margen;
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio / $tirada[$i], 4);
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] = $coste_envio - $margen_envio;
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] = $margen_envio;
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = 'Sin direccion';
$data['peso'] = $resultado_presupuesto['peso'][$i];
$data['palets'] = 'Sin direccion';
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$resultado_presupuesto = [
'errors' => (object) ([
'status' => 1
]),
];
return $resultado_presupuesto;
} else {
$resultado_presupuesto['eb'][$i] = round($coste_direccion->coste, 2);
$resultado_presupuesto['eb_margen'][$i] = round($coste_direccion->margen, 2);
}
}
for ($i = 0; $i < count($tirada); $i++) {
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] = 0.0;
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] = 0.0;
}
if (count($direcciones) > 0) {
for ($i = 0; $i < count($tirada); $i++) {
$envio_base = true;
$coste_envio = 0.0;
$margen_envio = 0.0;
foreach ($direcciones as $direccion)
{
// El primer envio no se calcula ya que se añade el base
if ($envio_base) {
//aporte del envio al precio unidad
$coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
$margen_envio += ($resultado_presupuesto['eb_margen'][$i] / $tirada[$i]);
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $resultado_presupuesto['eb'][$i] - $resultado_presupuesto['eb_margen'][$i];
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $resultado_presupuesto['eb_margen'][$i];
$envio_base = false;
continue;
}
$unidades = floor($direccion['unidades'] * $tirada[$i] / $selected_tirada);
$coste_direccion = $this->getCosteEnvio(
$direccion['direccion'],
$resultado_presupuesto['peso'][$i],
$unidades,
$direccion['entregaPalets'] == 'true' ? 1 : 0,
false,
);
if (!property_exists($coste_direccion, 'coste')) {
$errorModel = new ErrorPresupuesto();
$data['direccion'] = $direccion;
$data['peso'] = $resultado_presupuesto['peso'][$i];
$data['palets'] = $direccion['entregaPalets'] == 'true' ? 1 : 0;
$errorModel->insertError(
$id,
auth()->user()->id,
'No se ha podido calcular el coste de envío',
$data
);
$resultado_presupuesto = [
'errors' => (object) ([
'status' => 1
]),
];
return $resultado_presupuesto;
} else {
//aporte del envio al precio unidad
$coste_envio += ($coste_direccion->coste / $tirada[$i]);
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] += $coste_direccion->coste - $coste_direccion->margen;
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] += $coste_direccion->margen;
}
}
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
}
} else {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
$coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
$resultado_presupuesto['info']['totales'][$i]['coste_envio'] = $resultado_presupuesto['eb'][$i] - $resultado_presupuesto['eb_margen'][$i];
$resultado_presupuesto['info']['totales'][$i]['margen_envio'] = $resultado_presupuesto['eb_margen'][$i];
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
}
}
$model_presupuesto = new PresupuestoModel();
$tiradas_alternativas = [];
$resumen_totales = [];
@ -1117,6 +1227,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datos_presupuesto['retractilado'] = $retractilado;
$datos_presupuesto['retractilado5'] = $retractilado5;
$datos_presupuesto['entrega_taller'] = $reqData['entrega_taller'] ?? 0;
$resultado_presupuesto['info']['merma'] = $this->calcular_merma($selected_tirada, $POD);
@ -1234,6 +1345,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if ($presupuesto) {
$data['lc'] = $presupuesto->lomo_cubierta;
$data['lsc'] = $presupuesto->lomo_sobrecubierta;
$data['eb'] = $presupuesto->envio_base;
$data['state'] = intval($presupuesto->estado_id);
$data['datosGenerales']['titulo'] = $presupuesto->titulo;
$data['datosGenerales']['autor'] = $presupuesto->autor;
@ -1314,7 +1426,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (intval($presupuesto->recoger_en_taller) == 1) {
$data['direcciones']['entrega_taller'] = 1;
} else {
$data['direcciones']['entrega_taller'] = 0;
$data['direcciones'] = $this->obtenerDireccionesEnvio($id, $presupuesto->cliente_id);
}
@ -1481,26 +1592,27 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$peso_envio = $peso_libro * $unidades / 1000.0;
$data = $this->getCosteEnvio(
$direccion['id'],
$direccion['direccion'],
$peso_libro,
$direccion['unidades'],
$direccion['entregaPalets'] == 'false' ? 0 : 1
$direccion['entregaPalets'] == 'false' ? 0 : 1,
false
);
if (count($data) > 0) {
if (isset($data->coste)) {
$data[0]->presupuesto_id = $presupuestoId;
$data[0]->tarifa_id = $data[0]->id;
unset($data[0]->id);
$data[0]->precio = $data[0]->coste;
unset($data[0]->coste);
$data[0]->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1;
unset($data[0]->tipo);
$data[0]->peso = $peso_envio;
$data[0]->cantidad = $unidades;
$data->presupuesto_id = $presupuestoId;
$data->tarifa_id = $data->id;
unset($data->id);
$data->precio = $data->coste;
unset($data->coste);
$data->entregaPieCalle = $direccion['entregaPalets'] == 'false' ? 0 : 1;
unset($data->tipo);
$data->peso = $peso_envio;
$data->cantidad = $unidades;
$model = new PresupuestoDireccionesModel();
$model->insert($data[0]);
$model->insert($data);
}
}
@ -1566,18 +1678,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
protected function getCosteEnvio($direccionId = null, $peso, $unidades, $entregaPieCalle)
protected function getCosteEnvio($direccion, $peso, $unidades, $entregaPieCalle, $calcular_envio_base)
{
$return_data = $direccion;
if ($direccionId != null) {
$model = model('App\Models\Clientes\ClienteDireccionesModel');
$data = $model->getDireccion($direccionId);
if ($calcular_envio_base) {
$pais_id = 1; // españa
$cp = 18000; // envio nacional
} else {
$data = [];
array_push($data, (object) [
'pais_id' => 1, // españa
'cp' => 18000, // envio nacional
]);
$pais_id = $direccion['pais_id'];
$cp = $direccion['cp'];
}
@ -1585,44 +1696,43 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste = 0;
$margen = 0;
if (count($data) > 0) {
$peso_envio = round(floatval($peso * $unidades / 1000.0)); // peso libro * unidades y se pasa a kilogramos
$tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($data[0]->pais_id, $data[0]->cp, $peso_envio, $entregaPieCalle ? 'palets' : 'cajas');
for ($i = 0; $i < count($tarifas_envio); $i++) {
if ($peso_envio > $tarifas_envio[$i]->peso_max || floatval($tarifas_envio[$i]->precio_max) == 0) {
$tarifas_envio[$i]->precio = number_format(floatval($tarifas_envio[$i]->precio_min) + ($peso_envio - floatval($tarifas_envio[$i]->peso_min)) * floatval($tarifas_envio[$i]->precio_adicional), 2);
}
// si no se calcula linealmente
else {
$m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min));
$b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max;
$tarifas_envio[$i]->precio = number_format($m * $peso_envio + $b, 2);
}
$margen = $tarifas_envio[$i]->margen;
}
if (count($tarifas_envio) > 1) {
$tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) {
return $current->precio < $previous->precio ? $current : $previous;
});
$coste = $tarifa_final->precio;
} else {
if (count($tarifas_envio) > 0)
$coste = $tarifas_envio[0]->precio;
$peso_envio = round(floatval(floatval($peso) * floatval($unidades) / 1000.0)); // peso libro * unidades y se pasa a kilogramos
$tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($pais_id, $cp, $peso_envio, $entregaPieCalle ? 'palets' : 'cajas');
for ($i = 0; $i < count($tarifas_envio); $i++) {
if ($peso_envio > $tarifas_envio[$i]->peso_max || floatval($tarifas_envio[$i]->precio_max) == 0) {
$tarifas_envio[$i]->precio = number_format(floatval($tarifas_envio[$i]->precio_min) + ($peso_envio - floatval($tarifas_envio[$i]->peso_min)) * floatval($tarifas_envio[$i]->precio_adicional), 2);
}
}
if (count($data) > 0 && count($tarifas_envio) > 0) {
$data[0]->coste = $coste;
$data[0]->tipo = $entregaPieCalle ? 'palets' : 'cajas';
$data[0]->margen = $margen;
$data[0]->proveedor = $tarifas_envio[0]->proveedor;
$data[0]->proveedor_id = $tarifas_envio[0]->proveedor_id;
// si no se calcula linealmente
else {
$m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min));
$b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max;
$tarifas_envio[$i]->precio = number_format($m * $peso_envio + $b, 2);
}
$margen = $tarifas_envio[$i]->margen;
}
return $data;
if (count($tarifas_envio) > 1) {
$tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) {
return $current->precio < $previous->precio ? $current : $previous;
});
$coste = $tarifa_final->precio;
} else {
if (count($tarifas_envio) > 0)
$coste = $tarifas_envio[0]->precio;
$margen = $tarifas_envio[0]->margen;
}
$return_data['coste'] = $coste;
$return_data['tipo'] = $entregaPieCalle ? 'palets' : 'cajas';
$return_data['margen'] = $margen;
$return_data['proveedor'] = $tarifas_envio[0]->proveedor;
$return_data['proveedor_id'] = $tarifas_envio[0]->proveedor_id;
return (object) $return_data;
}
protected function calcular_presupuesto($datos_entrada, $selected_tirada, $extra_info = false)
protected function calcular_presupuesto($datos_entrada, $selected_tirada, $extra_info = false)
{
try {
$return_data = [];
@ -2618,7 +2728,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
{
$model = model('App\Models\Presupuestos\PresupuestoDireccionesModel');
$model_direcciones = model('App\Models\Clientes\ClienteDireccionesModel');
$direcciones = $model->where('presupuesto_id', $id)->findAll();
$direcciones = $model->where('presupuesto_id', $id)->asArray()->findAll();
return $direcciones;
$result = [];
$temp = [];

View File

@ -76,18 +76,8 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle
$POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$ancho = $postData['ancho'] ?? 0;
$alto = $postData['alto'] ?? 0;
$result = [];
if (count($datos_tarifas) > 0) {
foreach ($datos_tarifas as $tarifa) {
if ($tarifaModel->isTarifaPorHoras($tarifa['tarifa_id'])) {
$values = $this->model->getPrecioTarifaHoras($tarifa['tarifa_id'], $paginas, $tirada, -1, $POD);
} else {
$values = $this->model->getPrecioTarifa($tarifa['tarifa_id'], $paginas, $tirada, $ancho, $alto, -1, $POD);
}
array_push($result, $values[0]);
}
}
$result = $this->getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -99,6 +89,26 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle
return $this->respond($data);
}
public function getServiciosEncuadernacion($datos_tarifas, $tirada, $paginas, $ancho, $alto, $POD)
{
$result = [];
$tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
$model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
if (count($datos_tarifas) > 0) {
foreach ($datos_tarifas as $tarifa) {
if ($tarifaModel->isTarifaPorHoras($tarifa['tarifa_id'])) {
$values = $model->getPrecioTarifaHoras($tarifa['tarifa_id'], $paginas, $tirada, -1, $POD);
} else {
$values = $model->getPrecioTarifa($tarifa['tarifa_id'], $paginas, $tirada, $ancho, $alto, -1, $POD);
}
array_push($result, $values[0]);
}
}
return $result;
}
public function datatable()
{

View File

@ -95,14 +95,8 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController
$tarifas = $postData['datos'] ?? [];
$tirada = $postData['tirada'] ?? 0;
$POD = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
$result = [];
if(count($tarifas)>0){
foreach ($tarifas as $tarifa){
$values = $this->model->getPrecioTarifa($tarifa, $tirada, $POD);
array_push($result, $values[0]);
}
}
$result = $this->getServiciosManipulado($tarifas, $tirada, $POD);
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -113,6 +107,22 @@ class Presupuestomanipulados extends \App\Controllers\BaseResourceController
return $this->respond($data);
}
public function getServiciosManipulado($datos_tarifas, $tirada, $POD)
{
$result = [];
$model = model('App\Models\Presupuestos\PresupuestoManipuladosModel');
if (count($datos_tarifas) > 0) {
foreach ($datos_tarifas as $tarifa) {
$values = $model->getPrecioTarifa($tarifa['tarifa_id'], $tirada, $POD);
$values[0]->cubierta = $tarifa['cubierta'] ?? 0;
$values[0]->sobrecubierta = $tarifa['sobrecubierta'] ?? 0;
array_push($result, $values[0]);
}
}
return $result;
}
public function datatable()

View File

@ -82,7 +82,12 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$id = $reqData['id'] ?? 0;
$json_data = $reqData['json_tiradas'] ?? null;
$json_data_acabados = $reqData['json_acabados'] ?? null;
$json_data_encuadernacion = $reqData['json_encuadernaciones'] ?? null;
$json_data_manipulado = $reqData['json_manipulado'] ?? null;
$cliente_id = $reqData['cliente_id'] ?? 0;
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
@ -95,7 +100,7 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
foreach ($data as $linea) {
// Se obtienen los valores de cada linea para el calculo del precio
$datosPedido = (object)array(
$datosPedido = (object) array(
'paginas' => intval($linea['paginas']) ?? 0,
'tirada' => intval($reqData['tirada']) ?? 0,
'merma' => intval($reqData['merma']) ?? 0,
@ -144,24 +149,24 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$uso = 'interior';
$tipo = strpos($linea['row_id'], "_bn") !== false ? 'negro' : 'color';
$paginas_negro = isset($linea['numPagColor']) ? intval($datosPedido->paginas) - intval($linea['numPagColor']) : 0;
$paginas_color = $linea['numPagColor'] ?? 0;
$paginas = (object)array(
$paginas_color = $linea['numPagColor'] ?? 0;
$paginas = (object) array(
'negro' => $paginas_negro,
'color' => $paginas_color,
);
$parametrosRotativa = (object)array(
$parametrosRotativa = (object) array(
'a_favor_fibra' => $datosPedido->a_favor_fibra,
'bnPages' => $paginas->negro,
'colorPages' => $paginas->color,
'bnPages' => $paginas->negro,
'colorPages' => $paginas->color,
'rotativa_gota_negro' => 0,
'rotativa_gota_color' => 0,
);
$parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro']?? 0);
$parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor']?? 0);
$parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0);
$parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0);
$parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta']?? 0);
$parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo']?? 0);
$parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro'] ?? 0);
$parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor'] ?? 0);
$parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0);
$parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0);
$parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta'] ?? 0);
$parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo'] ?? 0);
break;
case 'lp_cubierta':
$uso = 'cubierta';
@ -194,14 +199,14 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$datosTipolog = $linea['gotaNegro'] ?? null;
if (!is_null($datosTipolog)) {
$datosTipolog = [];
$data_temp = (object)array(
$data_temp = (object) array(
'negro' => floatval($linea['cobNegro'] ?? 0),
'cyan' => floatval($linea['cobCyan'] ?? 0),
'magenta' => floatval($linea['cobMagenta']?? 0),
'amarillo' => floatval($linea['cobAmarillo']?? 0),
'magenta' => floatval($linea['cobMagenta'] ?? 0),
'amarillo' => floatval($linea['cobAmarillo'] ?? 0),
'cg' => floatval($linea['cobCG'] ?? 0),
'gota_negro' => floatval($linea['gotaNegro']?? 0),
'gota_color' => floatval($linea['gotaColor']?? 0),
'gota_negro' => floatval($linea['gotaNegro'] ?? 0),
'gota_color' => floatval($linea['gotaColor'] ?? 0),
);
array_push($datosTipolog, $data_temp);
}
@ -213,13 +218,13 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$datosLinea['datosPedido'] = $datosPedido;
$datosLinea['cliente_id'] = $cliente_id;
$datosLinea['papel'] = $papel;
if(isset($isColor))
$datosLinea['isColor'] = $isColor;
if(isset($opciones_papel))
if (isset($isColor))
$datosLinea['isColor'] = $isColor;
if (isset($opciones_papel))
$datosLinea['opciones_papel'] = $opciones_papel;
if(isset($parametrosRotativa))
if (isset($parametrosRotativa))
$datosLinea['parametrosRotativa'] = $parametrosRotativa;
if(isset($paginas))
if (isset($paginas))
$datosLinea['paginas'] = $paginas;
$datosLinea['maquina'] = $maquina;
$datosLinea['papel_generico'] = $papel_generico;
@ -257,19 +262,113 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$linea_coste['total_coste'] +=
$linea_coste['fields']['precio_tinta'];
if (strpos($linea['row_id'], 'lp_rot') === 0) {
$linea_coste['total_coste'] +=
$linea_coste['fields']['total_corte'];
}
$linea_coste['total_coste'] +=
$linea_coste['fields']['total_corte'];
}
}
$linea_coste['total_margen'] = $linea_coste['fields']['margen_papel_pedido'] +
$linea_coste['fields']['margen_impresion_horas'] +
$linea_coste['fields']['margen_click_pedido'];
unset($linea_coste['fields']);
array_push($values, $linea_coste);
}
// Calculo de los servicios (presimpresion y extra no dependen de nada)
$servicios = (object) (['coste' => 0.0, 'margen' => 0.0]);
if ($json_data_acabados) {
$json_data_acabados = json_decode($json_data_acabados, true);
if (count($json_data_acabados) > 0) {
$acabados = new Presupuestoacabados();
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
$result = $acabados->getServiciosAcabados($json_data_acabados, $reqData['tirada'], $POD);
if (count($result) > 0) {
foreach ($result as $servicio) {
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
$margen = round($servicio->total - $coste, 2);
$servicios->coste += $coste;
$servicios->margen += $margen;
}
}
}
}
if ($json_data_encuadernacion) {
$json_data_encuadernacion = json_decode($json_data_encuadernacion, true);
if (count($json_data_encuadernacion) > 0) {
$encuadernacion = new Presupuestoencuadernaciones();
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
$result = $encuadernacion->getServiciosEncuadernacion($json_data_encuadernacion, $reqData['tirada'], $reqData['paginas'], $reqData['ancho'], $reqData['alto'], $POD);
if (count($result) > 0) {
foreach ($result as $servicio) {
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
$margen = round($servicio->total - $coste, 2);
$servicios->coste += $coste;
$servicios->margen += $margen;
}
}
}
}
if ($json_data_manipulado) {
$json_data_manipulado = json_decode($json_data_manipulado, true);
if (count($json_data_manipulado) > 0) {
$manipulados = new Presupuestomanipulados();
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
$result = $manipulados->getServiciosManipulado($json_data_manipulado, $reqData['tirada'], $POD);
if (count($result) > 0) {
foreach ($result as $servicio) {
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
$margen = round($servicio->total - $coste, 2);
$servicios->coste += $coste;
$servicios->margen += $margen;
}
}
}
}
$json_envios = $reqData['json_envios'] ?? null;
$coste_envio = 0.0;
$margen_envio = 0.0;
$tirada_base = floatval($reqData['tirada_base']);
$peso_libro = floatval($reqData['peso_libro']);
// el primer envio con la tirada base
$model = model('App\Models\Tarifas\TarifaEnvioModel');
$envios = $model->getTarifaEnvio(1, 18000, $tirada_base * $peso_libro/1000.0, "cajas");
$resultado = $this->calcular_envio($envios, $tirada_base * $peso_libro/1000.0);
$coste_envio += $resultado->coste;
$margen_envio += $resultado->margen;
if ($json_envios) {
$json_envios = json_decode($json_envios, true);
if (count($json_envios) > 0) {
//la primera linea es el envio base
for($i = 1; $i < count($json_envios); $i++) {
$porcentaje = ($json_envios[$i]['cantidad']) / $tirada_base * 100.0;
$cantidad = floor($reqData['tirada'] * $porcentaje / 100.0);
$peso_envio = $cantidad * $peso_libro / 1000.0;
$paisId = $json_envios[$i]['pais_id'];
$cp = $json_envios[$i]['cp'];
$tipo_envio = $json_envios[$i]['entregaPieCalle'] == 1 ? 'palets' : 'cajas';
$model = model('App\Models\Tarifas\TarifaEnvioModel');
$envios = $model->getTarifaEnvio($paisId, $cp, $peso_envio, $tipo_envio);
$resultado = $this->calcular_envio($envios, $peso_envio);
$coste_envio += $resultado->coste;
$margen_envio += $resultado->margen;
}
}
}
} else {
$values = [];
}
@ -279,8 +378,36 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
$response[$csrfTokenName] = $newTokenHash;
$response['lineas'] = $values;
$response['servicios'] = $servicios;
$response['envios'] = (object) (['coste' => $coste_envio, 'margen' => $margen_envio]);
return $this->respond($response);
}
private function calcular_envio($envio, $peso_envio)
{
$coste_envio = 0.0;
$margen_envio = 0.0;
if (count(value: $envio) > 0) {
$envio = $envio[0];
if ($envio->id != null) {
if ($peso_envio > $envio->peso_max || floatval($envio->precio_max) == 0) {
$coste_envio += number_format(floatval($envio->precio_min) + ($peso_envio - floatval($envio->peso_min)) * floatval($envio->precio_adicional), 2);
}
// si no se calcula linealmente
else {
$m = (($envio->precio_max - $envio->precio_min) / ($envio->peso_max - $envio->peso_min));
$b = $envio->precio_max - $m * $envio->peso_max;
$coste_envio = number_format($m * $peso_envio + $b, 2);
}
$margen_envio += $coste_envio * $envio->margen / 100.0;
}
}
return (object) (['coste' => $coste_envio, 'margen' => $margen_envio]);
}
}

View File

@ -63,6 +63,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
"comentarios_pdf" => null,
"comentarios_tarifa" => null,
"comentarios_produccion" => null,
"comentarios_presupuesto" => null,
"lomo_cubierta" => null,
"lomo_sobrecubierta" => null,
"total_presupuesto" => null,
@ -107,6 +108,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
'paginasCuadernillo' => null,
'lomo_redondo' => null,
'cabezada' => null,
'envio_base' => null,
];
protected $casts = [
"cliente_id" => "int",

View File

@ -315,7 +315,7 @@ return [
'tiradasAlternativas' => 'Tiradas alternativas',
'tiradasInfoIVA' => 'Los precios mostrados no incluyen IVA',
'tiradaMargen' => 'Margen',
'tiradaEnvio' => 'Coste Envío',
'tiradaEnvio' => 'Precio Envío',
'tiradaImpresion' => 'Coste Impresión',
'duplicado' => 'DUPLICADO',

View File

@ -85,6 +85,7 @@ class PresupuestoModel extends \App\Models\BaseModel
"comentarios_safekat",
"comentarios_pdf",
"comentarios_tarifa",
"comentarios_presupuesto",
"comentarios_produccion",
"lomo_cubierta",
"lomo_sobrecubierta",
@ -132,6 +133,7 @@ class PresupuestoModel extends \App\Models\BaseModel
'paginasCuadernillo',
'lomo_redondo',
'cabezada',
'envio_base',
];
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
@ -412,6 +414,7 @@ class PresupuestoModel extends \App\Models\BaseModel
'ferro_digital' => $data['ferro_digital'] ? 1 : 0,
'marcapaginas' => $data['marcapaginas'] ? 1 : 0,
'prototipo' => $data['prototipo'] ? 1 : 0,
'envio_base' => $data['envio_base'],
'papel_formato_id' => is_null($papel_formato_id) ? 0 : $papel_formato_id->id,
'papel_formato_personalizado' => !$papel_formato_id ? 1 : 0,
'papel_formato_ancho' => !$papel_formato_id ? $data['tamanio']['ancho'] : null,

View File

@ -73,38 +73,6 @@ async function get_coste_envio_tiradasAlternativas(tirada){
}
function checkInsertar(){
var cantidad_total = 0
$('#tableOfDireccionesEnvio').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
cantidad_total += parseInt(data.cantidad )
} );
var htmlString = ''
if(cantidad_total < parseInt($('#tirada').val())){
$('#rowInsertar').css('display', 'flex')
}
else{
$('#rowInsertar').css('display', 'none')
}
if(cantidad_total != parseInt($('#tirada').val())){
htmlString = `
<div class="alert alert-warning d-flex align-items-baseline" role="alert">
<span class="alert-icon alert-icon-lg text-primary me-2">
<i class="ti ti-bell ti-sm"></i>
</span>
<div class="d-flex flex-column ps-1">
<h5 class="alert-heading mb-2">` +
window.Presupuestos.validation.ejemplares_envio +
`</h5>
</div>
</div>`;
}
$('#alert-envios').html(htmlString)
}
async function updateTablaEnvios(tirada_inicial = null, tirada = null){
var peso_total_libro = get_peso_libro();
@ -201,80 +169,11 @@ $('#insertar_direccion').on('click', function(){
$(document).on('click', '.delete-add-row', function(e) {
const row = $(this).closest('tr');
tableEnvios.row( row )
.remove()
.draw();
checkInsertar()
//updateTotales(false, false, true)
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: true
})
showBreadCrumbSaveButton(true);
})
$(document).on('click', '.btn-edit-add', function(e) {
const row = $(this).closest('tr');
var data = tableEnvios.row( row ).data()
$("#addressForm").attr('action','edit')
$("#addressForm").attr('row', row[0]._DT_RowIndex)
$("#addressForm").attr('presupuestodireccion_id', $(this).attr('data-id'))
var $newAddDialog = $("#addressForm")
var maximaCantidad = parseInt($('#tirada').val())
$("#add_cantidad").attr("max" , maximaCantidad);
$("#add_cantidad").val( maximaCantidad);
$("#add_cantidad").on('change', function(){
$("#add_cantidad").val(parseInt($("#add_cantidad").val())>maximaCantidad ? maximaCantidad : $("#add_cantidad").val())
})
cantidad_total = 0
tableEnvios.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data2 = this.data();
cantidad_total += parseInt(data2.cantidad)
} );
cantidad_total -= parseInt(data.cantidad) // Si es editar tienes que restar los de la linea actual
$('#add_cantidad').attr('max-value', parseInt($('#tirada').val())-cantidad_total)
$('#add_cantidad').val(parseInt($('#tirada').val())-cantidad_total)
$('#add_att').val(data.att)
$('#add_direccion').val(data.direccion)
$('#add_email').val(data.email)
$('#add_cp').val(data.cp)
$('#add_municipio').val(data.municipio)
$('#add_provincia').val(data.provincia)
$('#add_pais_id').val(data.paisId)
$('#add_telefono').val(data.telefono)
$('#add_cantidad').val(data.cantidad)
$('#add_entregaPieCalle').prop('checked', data.entregaPieCalle==1?true:false)
$newAddDialog.modal('show')
})
$('#recoger_en_taller').change(function(){
if(this.checked) {
$('#rowTable').css('display', 'none')
$('#rowInsertar').css('display', 'none')
tableEnvios.clear().draw()
}
else{
$('#rowTable').css('display', 'flex')
$('#rowInsertar').css('display', 'flex')
tableEnvios.columns.adjust();
}
})
@ -316,43 +215,5 @@ function save_datos_envios(){
}
function load_datos_envios(){
window.direccionesList.forEach((linea) => {
tableEnvios.row
.add({
'tarifa_id': linea.tarifa_id,
'cantidad': linea.cantidad,
'peso': linea.peso,
'att': linea.att,
'email': linea.email,
'direccion': linea.direccion,
'cp': linea.cp,
'municipio': linea.municipio,
'provincia': linea.provincia,
'paisId': linea.pais_id,
'telefono': linea.telefono,
'proveedor': linea.proveedor,
'proveedor_id': linea.proveedor_id,
'precio': linea.precio,
'margen': linea.margen,
'entregaPieCalle': linea.entregaPieCalle,
'actionBtns_direcciones': actionBtns_direcciones,
})
.draw();
checkInsertar()
});
updatePresupuesto({
update_lineas: false,
update_servicios: false,
update_envios: false,
update_resumen: true,
update_tiradas_alternativas: false
})
}
*/

View File

@ -10,6 +10,15 @@
<div class="accordion-body">
<div id='alert-envios'></div>
<?= view("themes/vuexy/form/presupuestos/admin/_presupuestoDireccionesForm") ?>
<div class='row'>
<div class='col-md-12 col-lg-4 px-4 py-2'>
<label for='envio_base' class='form-label'>
Envio base
</label>
<input readonly type='text' class='form-control' id='envio_base' name='envio_base' value='<?= $presupuestoEntity->envio_base ?>' />
</div>
</div>
<div id='rowTable' class='row'>
<table id="tableOfDireccionesEnvio" class="table comparator-table dt-responsive dataTable px-2 update-resumen-presupuesto" style="width: 95%;">
<thead>

View File

@ -2,20 +2,21 @@
<div class="modal-dialog modal-lg modal-simple">
<div class="modal-content">
<div class="modal-header">
<h4 id="labelTitleConfirmDialog" class="modal-title"><?= lang('PresupuestosDirecciones.direccionTitle') ?></h4>
<h4 id="labelTitleConfirmDialog" class="modal-title">
<?= lang('PresupuestosDirecciones.direccionTitle') ?></h4>
</div>
<div class="modal-body">
<div id='error-tarifa'></div>
<div class="mb-3">
<label for="add_clientedAdd" class="form-label">
<?=lang('PresupuestosDirecciones.clientedAdd') ?>*
</label>
<select id="add_clientedAdd" class="form-control select2bs" style="width: 100%;" >
</select>
</div><!--//.mb-3 -->
<div id='error-tarifa'></div>
<div class="mb-3">
<label for="add_clientedAdd" class="form-label">
<?= lang('PresupuestosDirecciones.clientedAdd') ?>*
</label>
<select id="add_clientedAdd" class="form-control select2bs" style="width: 100%;">
</select>
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="add_cantidad" class="form-label">
<?= lang('PresupuestosDirecciones.cantidad') ?>*
@ -41,32 +42,32 @@
<input type="text" id="add_direccion" maxLength="255" class="form-control new-address">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="add_pais_id" class="form-label">
<?=lang('PresupuestosDirecciones.pais') ?>*
<?= lang('PresupuestosDirecciones.pais') ?>*
</label>
<select id="add_pais_id" class="form-control select2bs new-address" style="width: 100%;" >
<select id="add_pais_id" class="form-control select2bs new-address" style="width: 100%;">
</select>
</div><!--//.mb-3 -->
<div class='row'>
<div id='divMunicipio' class="col-md-12 col-lg-12 pl-4">
<div id='divMunicipio' class="col-md-12 col-lg-12 pl-4">
<div class="mb-3">
<label for="add_municipio" class="form-label">
<?=lang('PresupuestosDirecciones.municipio') ?>*
<?= lang('PresupuestosDirecciones.municipio') ?>*
</label>
<input type="text" id="add_municipio" maxLength="100" class="form-control new-address">
</div><!--//.mb-3 -->
</div>
<div class="col-md-12 col-lg-6 pl-4 spain-data" style="display: none;">
<div class="col-md-12 col-lg-6 pl-4 spain-data" style="display: none;">
<div class="mb-3">
<label for="add_provincia" class="form-label">
<?=lang('PresupuestosDirecciones.provincia') ?>*
<?= lang('PresupuestosDirecciones.provincia') ?>*
</label>
<input type="text" id="add_provincia" maxLength="100" class="form-control new-address">
</div><!--//.mb-3 -->
@ -76,37 +77,42 @@
<div class='row'>
<div class="col-md-12 col-lg-6 pl-4">
<div class="col-md-12 col-lg-6 pl-4">
<div class="mb-3">
<label for="add_cp" class="form-label">
<?=lang('PresupuestosDirecciones.cp') ?>*
<?= lang('PresupuestosDirecciones.cp') ?>*
</label>
<input type="text" id="add_cp" maxLength="100" class="form-control new-address">
</div><!--//.mb-3 -->
</div>
<div class="col-md-12 col-lg-6 pl-4">
<div class="col-md-12 col-lg-6 pl-4">
<div class="mb-3">
<label for="add_telefono" class="form-label">
<?=lang('PresupuestosDirecciones.telefono') ?>*
<?= lang('PresupuestosDirecciones.telefono') ?>*
</label>
<input type="text" id="add_telefono" maxLength="100" class="form-control new-address"></input>
<input type="text" id="add_telefono" maxLength="100"
class="form-control new-address"></input>
</div><!--//.mb-3 -->
</div>
</div> <!-- //.row -->
<div class="col-md-12 col-lg-6 pl-4">
<div class="col-md-12 col-lg-6 pl-4">
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="add_entregaPieCalle" name="add_entregaPieCalle" value="1" >
<label class="form-check-label" for="add_entregaPieCalle"><?= lang('PresupuestosDirecciones.entregaPieCalle') ?></label>
<input class="form-check-input" type="checkbox" id="add_entregaPieCalle"
name="add_entregaPieCalle" value="1">
<label class="form-check-label"
for="add_entregaPieCalle"><?= lang('PresupuestosDirecciones.entregaPieCalle') ?></label>
</div>
</div>
<div class="col-md-12 col-lg-6 pl-4">
<div class="col-md-12 col-lg-6 pl-4">
<div class="form-check form-switch mb-2">
<input class="form-check-input" type="checkbox" id="add_saveDirection" name="add_saveDirection" value="1" >
<label class="form-check-label" for="add_saveDirection"><?= lang('PresupuestosDirecciones.saveDirection') ?></label>
<input class="form-check-input" type="checkbox" id="add_saveDirection" name="add_saveDirection"
value="1">
<label class="form-check-label"
for="add_saveDirection"><?= lang('PresupuestosDirecciones.saveDirection') ?></label>
</div>
</div>
@ -114,22 +120,15 @@
<label style="display:none" for="add_alias" class="form-label save-alias">
<?= lang('PresupuestosDirecciones.alias') ?>*
</label>
<input type="text" id="add_alias" maxLength="100" class="form-control new-address save-alias" style='display: none;'>
<input type="text" id="add_alias" maxLength="100" class="form-control new-address save-alias"
style='display: none;'>
</div><!--//.mb-3 -->
</div>
<div class="modal-footer">
<button id="saveDireccionEnvio"
type="button"
class="btn btn-primary"
>Guardar</button>
<button id="cancelAdd"
type="button"
class="btn btn-default"
>Cancelar</button>
<button id="saveDireccionEnvio" type="button" class="btn btn-primary">Guardar</button>
<button id="cancelAdd" type="button" class="btn btn-default">Cancelar</button>
</div>
</div>
</div>
</div>
</div>

View File

@ -1,59 +1,3 @@
// Selección de la última columna de la tabla de tiradas
const lastColNr_tiradasAlt = $('#tableTiradas').find("tr:first th").length - 1;
// Función para generar los botones de acción de la tabla de tiradas
const actionBtns_tiradasAlt = function (data) {
return `
<a href="javascript:void(0);"><i class="ti ti-check ti-sm comfirm-tirada-alt mx-2" data-id="${data.row_id}"></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-tirada mx-2" data-id="${data.row_id}"></i></a>
`;
};
// Inicializaciones de la tabla de tiradas
var tableTiradas;
// Espera a que todas las variables necesarias estén definidas
(async () => {
while (!window.hasOwnProperty("datatable_lang_url") && !window.hasOwnProperty("datatable_TA_url"))
await new Promise(resolve => setTimeout(resolve, 200));
initTableTiradas();
fill_tiradas_alternativas();
/*$('.tiradas-alternativas').each(function() {
if ($(this).is('input')) {
$(this).bind('change', update_tiradas_alternativas);
} else if ($(this).is('button')) {
$(this).bind('click', update_tiradas_alternativas);
} else if ($(this).is('table')) {
$(this).bind('draw.dt', update_tiradas_alternativas);
}
else{
// para los botones de borrar
$(this).bind('click', update_tiradas_alternativas);
}
});*/
})();
async function actualizar_tiradas_alternativas(){
if(tableTiradas !== undefined && tableTiradas.rows().count() > 0){
// se obtiene la primera columna de la tabla de tiradas
const data = tableTiradas.rows().data().toArray();
// se borra la tabla de tiradas
tableTiradas.clear().draw();
const tiradas = data.map(row => row.tirada);
// por cada tirada, se añade una fila a la tabla de tiradas
await tiradas.forEach(async function(tirada){
await add_tirada_alternativa(tirada);
});
}
}
// Evento de añadir una tirada alternativa
@ -229,55 +173,6 @@ function getLomoExterior(){
}
// Inicialización de la tabla de tiradas
function initTableTiradas() {
tableTiradas = $('#tableTiradas').DataTable({
"language": {
"url": window.datatable_lang_url
},
"paging": false,
"info": false,
"searching": false,
"ordering": true,
"autoWidth": false,
"responsive": true,
"columnDefs": [
{
orderable: false,
searchable: false,
targets: [lastColNr_tiradasAlt]
},
],
"columns": [
{ data: "tirada" },
{ data: 'coste_impresion' },
{ data: 'coste_envio' },
{ data: 'margen' ,
render: function ( data, type, row ) {
return data + '%';
}
},
{ data: 'total_pedido' },
{ data: 'precio_unidad' },
{
data: actionBtns_tiradasAlt,
className: 'row-edit dt-center'
}
],
order: [[0, 'asc']]
});
}
// Evento de borrado de una fila de la tabla de tiradas
$(document).on('click', '.btn-delete-tirada', function (e) {
const row = $(this).closest('tr');
tableTiradas.row(row)
.remove()
.draw();
showBreadCrumbSaveButton(true);
})
// Función para usar la tirada alternativa como tirada principal
$(document).on('click', '.comfirm-tirada-alt', function (e) {
@ -340,57 +235,9 @@ function filterData(data, keys) {
}
// Función para obtener la merma de la tirada alternativa
function get_merma_tirada_alternativa(tirada){
var merma = 0
if(tirada>parseInt($('#POD').val())){
merma = tirada*0.1<=30 ? tirada*0.1 : 30
}
else{
merma_lineas = []
$('#tableLineasPresupuesto').DataTable().rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var rowData = this.data();
if(rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta'){
const formas_linea = $('#isCosido').val()==0?parseInt(rowData.formas):parseInt(rowData.formas)/2
if(formas_linea > tirada)
merma_lineas.push(formas_linea-tirada)
else
merma_lineas.push(tirada%formas_linea)
}
})
if(merma_lineas.length>0)
merma = Math.max(...merma_lineas)
else
merma = 0
}
return merma;
}
function fill_tiradas_alternativas(){
tableTiradas.clear().draw();
const text = $('#tirada_alternativa_json_data').val()
if(text.length>0){
const data = JSON.parse(text);
if(data.length>0){
$.each(data, function(key, value) {
tableTiradas.row.add({
tirada: value.tirada,
coste_impresion: value.coste_impresion,
coste_envio: value.coste_envio,
margen: value.margen,
total_pedido: value.total_pedido,
precio_unidad: value.precio_unidad,
}).draw(false);
});
}
}
}

View File

@ -30,7 +30,7 @@
<th><?= lang('Presupuestos.tiradaMargen') ?></th>
<th><?= lang('Presupuestos.totalPedido') ?></th>
<th><?= lang('Presupuestos.precioUnidad') ?></th>
<th></th>
<th style="min-width: 80px;"></th>
</tr>
</thead>
@ -48,21 +48,6 @@
</div> <!-- //.accordion-item -->
</div> <!-- //.accordion -->
<!------------------------------------------------------->
<!-- Código JS comportamiento ?????. -->
<!------------------------------------------------------->
<?= $this->section("additionalInlineJs") ?>
/* window.datatable_lang_url = "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json";
window.datatable_TA_url = "<?= route_to('dataTableOfPresupuestoTiradasAlternativas') ?>";
window.get_tirada_url = "<?= route_to('getTiradaData') ?>";
window.error_lang_tirada_alt_duplicada = "<?= lang('Presupuestos.errores.tirada_alt_duplicada') ?>";
window.error_lang_tirada_alt_tipo = "<?= lang('Presupuestos.errores.tirada_alt_tipo') ?>";
*/
<?= $this->endSection() ?>

View File

@ -29,6 +29,7 @@
<input readonly hidden id="lomo_minimo_fresado_cosido" value="<?= $lomo_minimo_fresado_cosido ?>"></input>
<input readonly hidden id="pod" value="<?= $POD ?>"></input>
<input readonly hidden id="c" value="<?= $clienteId ?>"></input>
<input readonly hidden id="eb" value="<?= $eb ?>"></input>
<!-- Create Deal Wizard -->
<div id="wizard-presupuesto-cliente" class="bs-stepper vertical mt-2 linear">

View File

@ -8,6 +8,7 @@ class tarjetaDireccion {
this.card = this.#generateHTML(id, direccion);
this.deleteBtn = this.card.find('.direccion-eliminar');
this.editBtn = this.card.find('.direccion-editar');
this.direccion = direccion;
}
@ -89,13 +90,21 @@ class tarjetaDireccion {
return this.id;
}
getPaisId() {
return this.direccion.pais_id;
}
getDireccion() {
return this.direccion;
}
getDireccionId() {
return this.direccionId;
}
getFormData() {
return {
id: this.direccionId,
direccion: this.direccion,
unidades: this.getUnidades(),
entregaPalets: this.getEntregaPalets()
};

View File

@ -8,6 +8,7 @@ import LineasPresupuesto from './sections/lineasPresupuesto.js';
import PreviewFormasAdmin from './sections/previewFormasAdmin.js';
import Servicios from './sections/servicios.js';
import Envios from './sections/envios.js';
import TiradasAlernativas from './sections/tiradasAlternativas.js';
class PresupuestoAdminEdit {
@ -40,6 +41,9 @@ class PresupuestoAdminEdit {
this.previewFormasAdmin = null;
this.servicios = new Servicios();
this.envios = new Envios();
this.tiradasAlternativas = new TiradasAlernativas({
getDimensionLibro: this.getDimensionLibro,
});
this.calcularPresupuesto = false;
}
@ -69,7 +73,6 @@ class PresupuestoAdminEdit {
this.datosLibro.init();
this.comparador.init();
this.lineasPresupuesto.init();
this.envios.init();
this.previewFormasAdmin = new PreviewFormasAdmin(tipoLibro, this.tipoTapa,
{
@ -84,6 +87,8 @@ class PresupuestoAdminEdit {
);
this.previewFormasAdmin.init();
this.servicios.init();
this.envios.init();
this.tiradasAlternativas.init();
if (window.location.href.includes("edit")) {
@ -128,6 +133,14 @@ class PresupuestoAdminEdit {
self.servicios.cargar(response.data.servicios);
self.envios.cargar(response.data.direcciones);
$('#comentariosCliente').val(response.data.comentarios_cliente);
$('#comentariosSafekat').val(response.data.comentarios_safekat);
$('#comentariosPdf').val(response.data.comentarios_presupuesto);
$('#comentariosProduccion').val(response.data.comentarios_produccion);
self.tiradasAlternativas.cargar(response.data.tiradasAlternativas);
/*self.direcciones.handleChangeCliente();
self.direcciones.cargarDatos(response.data.direcciones, response.data.datosGenerales);

View File

@ -0,0 +1,338 @@
import { getToken } from "../../../common/common.js";
class TiradasAlernativas {
constructor(functions = {}) {
this.getDimensionLibro = functions.getDimensionLibro;
this.csrf_token = getToken();
this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val();
this.addTirada = $('#add_tirada_alt');
this.tirada = $('#tirada_alt');
this.table = null;
}
init() {
const self = this;
this.addTirada.on('click', this.addTiradaAlt.bind(this));
this.table = $('#tableTiradas').DataTable({
"language": {
"url": "/themes/vuexy/vendor/libs/datatables-sk/plugins/i18n/es-ES.json"
},
"paging": false,
"info": false,
"searching": false,
"ordering": true,
"autoWidth": false,
"responsive": true,
"columnDefs": [
{
orderable: false,
searchable: false,
targets: [$('#tableTiradas').find("tr:first th").length - 1]
},
],
"columns": [
{ data: "tirada" },
{ data: 'coste_impresion' },
{
data: 'coste_envio',
render: function (data, type, row) {
return parseFloat(data).toFixed(2);
},
},
{
data: 'margen',
render: function (data, type, row) {
return data + '%';
}
},
{
data: 'total_pedido',
render: function (data, type, row) {
return parseFloat(data).toFixed(2);
}
},
{
data: 'precio_unidad',
render: function (data, type, row) {
return parseFloat(data).toFixed(4);
}
},
{
data: function (row, type, set, meta) {
return `
<a href="javascript:void(0);"><i class="ti ti-check ti-sm comfirm-tirada-alt mx-2" ></i></a>
<a href="javascript:void(0);"><i class="ti ti-trash ti-sm btn-delete-tirada mx-2" F></i></a>
`;
},
className: 'row-edit dt-center'
}
],
order: [[0, 'asc']]
});
// Evento de borrado de una fila de la tabla de tiradas
$(document).on('click', '.btn-delete-tirada', function (e) {
const row = $(this).closest('tr');
self.table.row(row)
.remove()
.draw();
showBreadCrumbSaveButton(true);
})
}
cargar(datos) {
this.table.clear().draw();
this.table.rows.add(datos).draw();
}
addTiradaAlt() {
const self = this;
const id = window.location.href.split('/').pop();
const tirada = parseInt(this.tirada.val());
const tirada_ejemplo = parseInt($('#tirada').val());
const POD = parseInt($('#POD').val());
if ((tirada_ejemplo > POD && tirada <= POD) ||
(tirada_ejemplo <= POD && tirada > POD)) {
popErrorAlert('No se pueden mezclar tiradas POD y no POD', 'alert-tiradas_alt');
return;
}
if (this.table.rows().count() > 0) {
let tiradas = this.table.rows().data().toArray();
if (tiradas.find(t => parseInt(t.tirada) == tirada)) {
popErrorAlert('La tirada ya existe', 'alert-tiradas_alt');
return;
}
}
const dimension = this.getDimensionLibro();
const envios = JSON.stringify($('#tableOfDireccionesEnvio').DataTable().rows().data().toArray());
let datos = {
id: id,
tirada: this.tirada.val(),
peso_libro: this.get_peso_libro(),
tirada_base: $('#tirada').val(),
paginas: $('#paginas').val(),
merma: this.getMerma(tirada),
tipo_impresion_id: $('#tipo_impresion_id').val(),
json_tiradas: this.generate_json_lp(),
json_acabados: this.generate_json_servicios('acabados'),
json_encuadernaciones: this.generate_json_servicios('encuadernaciones'),
json_manipulado: this.generate_json_servicios('manipulado'),
json_envios: envios,
ancho: dimension.ancho,
alto: dimension.alto,
cliente_id: $('#clienteId').find(":selected").val(),
solapas_cubierta: $('#solapas').is(':checked') ? 1 : 0,
solapas_cubierta_ancho: $('#solapas').is(':checked') ? parseInt($('#solapas_ancho').val()) : 0,
solapas_sobrecubierta: $('#solapas_sobrecubierta').is(':checked') ? 1 : 0,
solapas_sobrecubierta_ancho: $('#solapas_sobrecubierta').is(':checked') ? parseInt($('#solapas_ancho_sobrecubierta').val()) : 0,
lomo: $('#lomo_cubierta').val(),
};
$.ajax({
type: "POST",
url: '/presupuestotiradasalternativas/datatable_2',
data: datos,
success: async function (data) {
var coste_total = 0.0;
var margen_total = 0.0;
var costes_servicios = 0.0;
var margen_servicios = 0.0;
var coste_envio = 0.0;
var margen_envio = 0.0;
if (data.lineas.length > 0) {
// Se cogen los valores de la linea con los datos correspondientes
data.lineas.forEach(function (value) {
coste_total += value.total_coste;
margen_total += value.total_margen;
});
if (data.servicios) {
costes_servicios += data.servicios.coste;
margen_servicios += data.servicios.margen;
}
$('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
costes_servicios += parseFloat(rowData.coste);
margen_servicios += parseFloat(rowData.precio) - parseFloat(rowData.coste);
});
$('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
costes_servicios += parseFloat(rowData.coste);
margen_servicios += parseFloat(rowData.precio) - parseFloat(rowData.coste);
});
if (data.envios) {
coste_envio += data.envios.coste;
margen_envio += data.envios.margen;
}
// Se añade la fila a la tabla de tiradas
self.table.row.add({
tirada: datos.tirada,
coste_impresion: coste_total.toFixed(2),
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(4),
}).draw(false);
}
},
error: function (e) { }
});
}
generate_json_lp() {
const data = $('#tableLineasPresupuesto').DataTable().data().toArray();
let json = this.filterData(data,
['paginas',
'numPagColor',
'paginas_impresion',
'papel', // papel generico
'papel_impresion_id',
'gramaje',
'maquina_id',
'aFavorFibra',
'row_id',
'check_papel_total',
'check_impresion_total',
'cobAmarillo', // tipologia de papel
'cobCyan',
'cobMagenta',
'cobNegro',
'cobCG',
'gotaColor',
'gotaNegro']);
json.forEach(element => {
element['check_papel_total'] = $('#' + element['row_id'] + '_checkPapel').is(':checked') ? 1 : 0;
element['check_impresion_total'] = $('#' + element['row_id'] + '_checkClicks').is(':checked') ? 1 : 0;
});
return JSON.stringify(json);
}
generate_json_servicios(servicios) {
let json = [];
switch (servicios) {
case 'acabados':
$('#tableOfServiciosAcabado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
json.push(rowData);
});
break;
case 'encuadernaciones':
$('#tableOfServiciosEncuadernacion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
json.push(rowData);
});
break;
case 'presimpresion':
$('#tableOfServiciosPreimpresion').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
json.push(rowData);
});
break;
case 'manipulado':
$('#tableOfServiciosManipulado').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
json.push(rowData);
});
break;
case 'extra':
$('#tableOfServiciosExtra').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
json.push(rowData);
});
break;
}
return JSON.stringify(json);
}
get_peso_libro() {
var peso_total_libro = 0.0
$('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
peso_total_libro += parseFloat(rowData.peso)
})
return peso_total_libro;
}
getMerma(tirada) {
let merma = 0;
if (tirada > parseInt($('#POD').val())) {
merma = tirada * 0.1 <= 30 ? tirada * 0.1 : 30
}
else {
let merma_lineas = []
$('#tableLineasPresupuesto').DataTable().rows().every(function (rowIdx, tableLoop, rowLoop) {
var rowData = this.data();
if (rowData.row_id != 'lp_guardas' && rowData.row_id != 'lp_cubierta' && rowData.row_id != 'lp_sobrecubierta') {
const formas_linea = $('#isCosido').val() == 0 ? parseInt(rowData.formas) : parseInt(rowData.formas) / 2
if (formas_linea > tirada)
merma_lineas.push(formas_linea - tirada)
else
merma_lineas.push(tirada % formas_linea)
}
})
if (merma_lineas.length > 0)
merma = Math.max(...merma_lineas)
else
merma = 0
}
return merma;
}
filterData(data, keys) {
return data.map(obj => {
const newObj = {};
keys.forEach(key => {
if (obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
}
});
return newObj;
});
}
}
export default TiradasAlernativas;

View File

@ -104,7 +104,7 @@ class Direcciones {
for (let i = 0; i < datos.length; i++) {
let id = datos[i].id;
let unidades = datos[i].unidades;
let unidades = datos[i].cantidad;
let entregaPalets = datos[i].palets;
@ -113,7 +113,22 @@ class Direcciones {
if (unidades == null || unidades <= 0 || unidades == undefined)
return;
let peticion = new Ajax('/misdirecciones/getDireccionPresupuesto/' + id, {}, {},
let divId = "dirEnvio-1";
let direccionesActuales = this.divDirecciones.find('.direccion-cliente');
if (direccionesActuales.length > 0) {
// the the lass item
let last = direccionesActuales[direccionesActuales.length - 1];
divId = "dirEnvio-" + (parseInt(last.id.split('-')[1]) + 1);
}
let tarjeta = new tarjetaDireccion(this.divDirecciones, divId, datos[i]);
tarjeta.setUnidades(unidades);
tarjeta.setEntregaPalets(entregaPalets);
tarjeta.card.find('.direccion-editar').on('click', this.#editUnits.bind(self));
tarjeta.card.find('.direccion-eliminar').on('click', this.#deleteDireccion.bind(self));
this.divDirecciones.append(tarjeta.card);
this.direcciones.push(tarjeta);
/*let peticion = new Ajax('/misdirecciones/getDireccionPresupuesto/' + id, {}, {},
(response) => {
let divId = "dirEnvio-1";
let direccionesActuales = this.divDirecciones.find('.direccion-cliente');
@ -134,7 +149,7 @@ class Direcciones {
console.error('Error getting address');
});
peticion.get();
peticion.get();*/
}
}
} catch (e) {
@ -226,7 +241,7 @@ class Direcciones {
let direcciones = [];
this.direcciones.forEach(direccion => {
let dir = {
id: direccion.getId(),
direccion: direccion.getDireccion(),
unidades: direccion.getUnidades(),
entregaPalets: direccion.getEntregaPalets()
};
@ -306,12 +321,23 @@ class Direcciones {
total_unidades += parseInt(this.direcciones[i].getUnidades());
}
if (this.getSelectedTirada() == null) {
popErrorAlert("Tiene que seleccionar una tirada para insertar una dirección");
return;
}
if (total_unidades + parseInt(unidades) > this.getSelectedTirada()) {
popErrorAlert("El total de unidades enviadas tiene que ser menor que " + this.getSelectedTirada());
return;
}
}
else {
if (this.getSelectedTirada() == null) {
popErrorAlert("Tiene que seleccionar una tirada para insertar una dirección");
return;
}
if (unidades > this.getSelectedTirada()) {
popErrorAlert("El total de unidades enviadas tiene que ser menor que " + this.getSelectedTirada());
return;

View File

@ -569,6 +569,9 @@ class PresupuestoCliente {
popAlert2Hide();
for (let i = 0; i < response.tiradas.length; i++) {
if(i==0){
$('#eb').val(response.eb[i]);
}
new tarjetaTiradasPrecio(
this.divTiradasPrecios,
('precio-tiradas-' + response.tiradas[i]),
@ -677,6 +680,10 @@ class PresupuestoCliente {
},
}
if(this.direcciones.getSelectedTirada() != null && this.direcciones.getSelectedTirada() != undefined && this.direcciones.getSelectedTirada() > 0){
this.datos.selectedTirada = this.direcciones.getSelectedTirada();
}
this.datos.guardas = this.disenioCubierta.getGuardas();
if (calcularSolapas) {
@ -692,6 +699,7 @@ class PresupuestoCliente {
this.datos.retractilado = this.datosGenerales.retractilado.is(':checked') ? 1 : 0;
this.datos.retractilado5 = this.datosGenerales.retractilado5.is(':checked') ? 1 : 0;
this.datos.eb = $('#eb').val();
this.datos.cubierta = {
tipoCubierta: this.disenioCubierta.disenioCubierta.filter('.selected').attr('id'),
@ -758,6 +766,7 @@ class PresupuestoCliente {
referenciaCliente: this.datosGenerales.referenciaCliente.val(),
}
this.datos.selectedTirada = this.direcciones.getSelectedTirada();
this.datos
}
if (window.location.href.includes("edit")) {