mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'add/configuracion_cliente_cambios_importador_catalogo' into 'main'
terminado See merge request jjimenez/safekat!755
This commit is contained in:
@ -5,6 +5,7 @@ use App\Controllers\BaseResourceController;
|
|||||||
use App\Entities\Catalogo\CatalogoLibroEntity;
|
use App\Entities\Catalogo\CatalogoLibroEntity;
|
||||||
use App\Models\Catalogo\CatalogoLibroModel;
|
use App\Models\Catalogo\CatalogoLibroModel;
|
||||||
use App\Controllers\Presupuestos\Presupuestocliente;
|
use App\Controllers\Presupuestos\Presupuestocliente;
|
||||||
|
use App\Services\PresupuestoService;
|
||||||
|
|
||||||
class ImportadorCatalogo extends BaseResourceController
|
class ImportadorCatalogo extends BaseResourceController
|
||||||
{
|
{
|
||||||
@ -281,17 +282,19 @@ class ImportadorCatalogo extends BaseResourceController
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
// Ajuste del precio a RAMA
|
|
||||||
$dataToUpdate = [
|
|
||||||
'total_aceptado' => ($tirada * $precio_compra),
|
|
||||||
'total_aceptado_revisado' => ($tirada * $precio_compra),
|
|
||||||
'total_precio_unidad' => $precio_compra
|
|
||||||
];
|
|
||||||
$presupuestoModel = model('App\Models\Presupuestos\Presupuestomodel');
|
|
||||||
$presupuestoModel->update($response['data']['sk_id'], $dataToUpdate);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Ajuste del precio a RAMA
|
||||||
|
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
|
||||||
|
$response['data']['sk_id'],
|
||||||
|
$precio_compra,
|
||||||
|
$tirada
|
||||||
|
);
|
||||||
|
if ($respuesta_ajuste['warning'] == true) {
|
||||||
|
$response['price_warning'] = [
|
||||||
|
'new_precio_unidad' => $respuesta_ajuste['new_precio_unidad'],
|
||||||
|
'new_total' => $respuesta_ajuste['new_total'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return $this->respond($response);
|
return $this->respond($response);
|
||||||
|
|
||||||
|
|||||||
@ -330,10 +330,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'a_favor_fibra' => 1,
|
'a_favor_fibra' => 1,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$cliente_model = model(('App\Models\Clientes\ClienteModel'));
|
||||||
|
$cliente = $cliente_model->find($cliente_id);
|
||||||
// Para POD siempre es HQ
|
// Para POD siempre es HQ
|
||||||
if ($tirada[0] <= $POD) {
|
if ($tirada[0] <= $POD && !$cliente->forzar_rotativa_pod) {
|
||||||
$isHq = true;
|
$isHq = true;
|
||||||
}
|
}
|
||||||
|
$forzarRotativa = false;
|
||||||
|
if ($tirada[0] <= $POD && $cliente->forzar_rotativa_pod) {
|
||||||
|
$forzarRotativa = true;
|
||||||
|
}
|
||||||
|
|
||||||
$input_data = array(
|
$input_data = array(
|
||||||
'uso' => 'interior',
|
'uso' => 'interior',
|
||||||
@ -346,7 +352,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'cliente_id' => $cliente_id,
|
'cliente_id' => $cliente_id,
|
||||||
'paginas_color' => $paginas_color,
|
'paginas_color' => $paginas_color,
|
||||||
'excluirRotativa' => $excluirRotativa,
|
'excluirRotativa' => $excluirRotativa,
|
||||||
'papelInteriorDiferente' => $papelInteriorDiferente
|
'papelInteriorDiferente' => $papelInteriorDiferente,
|
||||||
|
'forzarRotativa' => $forzarRotativa,
|
||||||
);
|
);
|
||||||
|
|
||||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||||
@ -460,6 +467,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$id = $reqData['id'] ?? 0;
|
$id = $reqData['id'] ?? 0;
|
||||||
|
|
||||||
$cliente_id = $reqData['clienteId'] ?? -1;
|
$cliente_id = $reqData['clienteId'] ?? -1;
|
||||||
|
$noEnvioBase = model('App\Models\Clientes\ClienteModel')->find($cliente_id)->no_envio_base ?? false;
|
||||||
|
|
||||||
$tirada = $reqData['tirada'] ?? 0;
|
$tirada = $reqData['tirada'] ?? 0;
|
||||||
$selectedTirada = $reqData['selectedTirada'] ?? -1;
|
$selectedTirada = $reqData['selectedTirada'] ?? -1;
|
||||||
@ -609,6 +617,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
} else {
|
} else {
|
||||||
$coste = floatval($coste_direccion->coste);
|
$coste = floatval($coste_direccion->coste);
|
||||||
$margen = $coste * (intval($coste_direccion->margen) / 100.0);
|
$margen = $coste * (intval($coste_direccion->margen) / 100.0);
|
||||||
|
if ($noEnvioBase) {
|
||||||
|
$coste = 0.0;
|
||||||
|
$margen = 0.0;
|
||||||
|
}
|
||||||
$return_data['eb'][$i] = round($coste + $margen, 2);
|
$return_data['eb'][$i] = round($coste + $margen, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -746,10 +758,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'a_favor_fibra' => 1,
|
'a_favor_fibra' => 1,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$cliente_model = model(('App\Models\Clientes\ClienteModel'));
|
||||||
|
$cliente = $cliente_model->find($cliente_id);
|
||||||
// Para POD siempre es HQ
|
// Para POD siempre es HQ
|
||||||
if ($tirada[0] <= $POD) {
|
if ($tirada[0] <= $POD && !$cliente->forzar_rotativa_pod) {
|
||||||
$isHq = true;
|
$isHq = true;
|
||||||
}
|
}
|
||||||
|
$forzarRotativa = false;
|
||||||
|
if ($tirada[0] <= $POD && $cliente->forzar_rotativa_pod) {
|
||||||
|
$forzarRotativa = true;
|
||||||
|
}
|
||||||
|
|
||||||
$input_data = array(
|
$input_data = array(
|
||||||
'uso' => 'interior',
|
'uso' => 'interior',
|
||||||
@ -762,7 +780,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'cliente_id' => $cliente_id,
|
'cliente_id' => $cliente_id,
|
||||||
'paginas_color' => $paginas_color,
|
'paginas_color' => $paginas_color,
|
||||||
'excluirRotativa' => $excluirRotativa,
|
'excluirRotativa' => $excluirRotativa,
|
||||||
'papelInteriorDiferente' => $papelInteriorDiferente
|
'papelInteriorDiferente' => $papelInteriorDiferente,
|
||||||
|
'forzarRotativa' => $forzarRotativa,
|
||||||
);
|
);
|
||||||
|
|
||||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||||
@ -1126,6 +1145,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)];
|
$peso_libro = $resultado_presupuesto['peso'][array_search($selected_tirada, $tirada)];
|
||||||
|
|
||||||
// calculo del envio base (tirada_maxima)
|
// calculo del envio base (tirada_maxima)
|
||||||
|
$noEnvioBase = model('App\Models\Clientes\ClienteModel')->find($cliente_id)->no_envio_base ?? false;
|
||||||
$resultado_presupuesto['eb'] = [];
|
$resultado_presupuesto['eb'] = [];
|
||||||
$datos_presupuesto['envio_base'] = 0;
|
$datos_presupuesto['envio_base'] = 0;
|
||||||
for ($i = 0; $i < count($tirada); $i++) {
|
for ($i = 0; $i < count($tirada); $i++) {
|
||||||
@ -1139,6 +1159,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (intval($selected_tirada) == intval($tirada[$i])) {
|
if (intval($selected_tirada) == intval($tirada[$i])) {
|
||||||
|
if ($noEnvioBase) {
|
||||||
|
$coste_direccion->coste = 0.0;
|
||||||
|
$coste_direccion->margen = 0.0;
|
||||||
|
}
|
||||||
$datos_presupuesto['envio_base'] = round($coste_direccion->coste * (1 + $coste_direccion->margen / 100.0), 2);
|
$datos_presupuesto['envio_base'] = round($coste_direccion->coste * (1 + $coste_direccion->margen / 100.0), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,6 +1184,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
];
|
];
|
||||||
return $resultado_presupuesto;
|
return $resultado_presupuesto;
|
||||||
} else {
|
} else {
|
||||||
|
if ($noEnvioBase) {
|
||||||
|
$coste_direccion->coste = 0.0;
|
||||||
|
$coste_direccion->margen = 0.0;
|
||||||
|
}
|
||||||
$resultado_presupuesto['eb'][$i] = round($coste_direccion->coste, 2);
|
$resultado_presupuesto['eb'][$i] = round($coste_direccion->coste, 2);
|
||||||
$resultado_presupuesto['eb_margen'][$i] = round($coste_direccion->margen, 2);
|
$resultado_presupuesto['eb_margen'][$i] = round($coste_direccion->margen, 2);
|
||||||
}
|
}
|
||||||
@ -1176,10 +1204,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
for ($i = 0; $i < count($tirada); $i++) {
|
for ($i = 0; $i < count($tirada); $i++) {
|
||||||
$coste_envio = 0.0;
|
$coste_envio = 0.0;
|
||||||
$coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
|
$coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
|
||||||
$resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] =
|
$resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] =
|
||||||
floatval($resultado_presupuesto['eb'][$i])*(floatval($resultado_presupuesto['eb_margen'][$i])/100.0);
|
floatval($resultado_presupuesto['eb'][$i]) * (floatval($resultado_presupuesto['eb_margen'][$i]) / 100.0);
|
||||||
$resultado_presupuesto['info']['totales'][$i]['envio_base_coste'] = $resultado_presupuesto['eb'][$i];
|
$resultado_presupuesto['info']['totales'][$i]['envio_base_coste'] = $resultado_presupuesto['eb'][$i];
|
||||||
|
|
||||||
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
|
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1357,7 +1385,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
foreach ($serviciosAcabado as $service) {
|
foreach ($serviciosAcabado as $service) {
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||||
$servicio = $model->getPrecioTarifa(
|
$servicio = $model->getPrecioTarifa(
|
||||||
intval($service), intval($selected_tirada)+$resultado_presupuesto['info']['merma'], -1, $POD);
|
intval($service),
|
||||||
|
intval($selected_tirada) + $resultado_presupuesto['info']['merma'],
|
||||||
|
-1,
|
||||||
|
$POD
|
||||||
|
);
|
||||||
|
|
||||||
if (count($servicio) > 0) {
|
if (count($servicio) > 0) {
|
||||||
if ($servicio[0]->total > 0) {
|
if ($servicio[0]->total > 0) {
|
||||||
@ -1375,8 +1407,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
foreach ($serviciosAcabado as $service) {
|
foreach ($serviciosAcabado as $service) {
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||||
$servicio = $model->getPrecioTarifa(
|
$servicio = $model->getPrecioTarifa(
|
||||||
intval($service),
|
intval($service),
|
||||||
intval($selected_tirada) + $resultado_presupuesto['info']['merma'], -1, $POD);
|
intval($selected_tirada) + $resultado_presupuesto['info']['merma'],
|
||||||
|
-1,
|
||||||
|
$POD
|
||||||
|
);
|
||||||
|
|
||||||
if (count($servicio) > 0) {
|
if (count($servicio) > 0) {
|
||||||
if ($servicio[0]->total > 0) {
|
if ($servicio[0]->total > 0) {
|
||||||
@ -1393,8 +1428,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
foreach ($serviciosAcabado as $service) {
|
foreach ($serviciosAcabado as $service) {
|
||||||
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
$model = model('App\Models\Presupuestos\PresupuestoAcabadosModel');
|
||||||
$servicio = $model->getPrecioTarifa(
|
$servicio = $model->getPrecioTarifa(
|
||||||
intval($service),
|
intval($service),
|
||||||
intval($selected_tirada) + $resultado_presupuesto['info']['merma'], -1, $POD);
|
intval($selected_tirada) + $resultado_presupuesto['info']['merma'],
|
||||||
|
-1,
|
||||||
|
$POD
|
||||||
|
);
|
||||||
|
|
||||||
if (count($servicio) > 0) {
|
if (count($servicio) > 0) {
|
||||||
if ($servicio[0]->total > 0) {
|
if ($servicio[0]->total > 0) {
|
||||||
@ -1407,7 +1445,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$tarifa_id = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_lomo_redondo')->value;
|
$tarifa_id = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('id_servicio_lomo_redondo')->value;
|
||||||
$serv_lomo = PresupuestoCLienteService::getServiciosManipulado([
|
$serv_lomo = PresupuestoCLienteService::getServiciosManipulado([
|
||||||
'tarifa_id' => intval($tarifa_id),
|
'tarifa_id' => intval($tarifa_id),
|
||||||
'tirada' => $selected_tirada+$resultado_presupuesto['info']['merma'],
|
'tirada' => $selected_tirada + $resultado_presupuesto['info']['merma'],
|
||||||
'POD' => $POD,
|
'POD' => $POD,
|
||||||
])[0];
|
])[0];
|
||||||
|
|
||||||
@ -2039,10 +2077,16 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$info['merma'] = $datosPedido->merma;
|
$info['merma'] = $datosPedido->merma;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$cliente_model = model(('App\Models\Clientes\ClienteModel'));
|
||||||
|
$cliente = $cliente_model->find($cliente_id);
|
||||||
// Para POD siempre es HQ
|
// Para POD siempre es HQ
|
||||||
if ($tirada[$t] <= $POD) {
|
if ($tirada[$t] <= $POD && !$cliente->forzar_rotativa_pod) {
|
||||||
$isHq = true;
|
$isHq = true;
|
||||||
}
|
}
|
||||||
|
$forzarRotativa = false;
|
||||||
|
if ($tirada[$t] <= $POD && $cliente->forzar_rotativa_pod) {
|
||||||
|
$forzarRotativa = true;
|
||||||
|
}
|
||||||
|
|
||||||
$input_data = array(
|
$input_data = array(
|
||||||
'uso' => 'interior',
|
'uso' => 'interior',
|
||||||
@ -2055,7 +2099,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
'cliente_id' => $cliente_id,
|
'cliente_id' => $cliente_id,
|
||||||
'paginas_color' => $paginas_color,
|
'paginas_color' => $paginas_color,
|
||||||
'excluirRotativa' => $excluirRotativa,
|
'excluirRotativa' => $excluirRotativa,
|
||||||
'papelInteriorDiferente' => $papelInteriorDiferente
|
'papelInteriorDiferente' => $papelInteriorDiferente,
|
||||||
|
'forzarRotativa' => $forzarRotativa,
|
||||||
);
|
);
|
||||||
|
|
||||||
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
$interior = PresupuestoClienteService::obtenerInterior($input_data);
|
||||||
@ -3071,7 +3116,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$sumForFactor += round($linea['precio_pedido'], 2)
|
$sumForFactor += round($linea['precio_pedido'], 2)
|
||||||
- round($linea['margen_papel_pedido'], 2);
|
- round($linea['margen_papel_pedido'], 2);
|
||||||
$margenPapel += round($linea['margen_papel_pedido'], 2);
|
$margenPapel += round($linea['margen_papel_pedido'], 2);
|
||||||
|
|
||||||
$totalImpresion += round($linea['precio_click_pedido'], 2);
|
$totalImpresion += round($linea['precio_click_pedido'], 2);
|
||||||
$totalImpresion -= round($linea['margen_click_pedido'], 2);
|
$totalImpresion -= round($linea['margen_click_pedido'], 2);
|
||||||
$sumForFactor += round($linea['precio_click_pedido'], 2)
|
$sumForFactor += round($linea['precio_click_pedido'], 2)
|
||||||
|
|||||||
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Database\Migrations;
|
||||||
|
|
||||||
|
use CodeIgniter\Database\RawSql;
|
||||||
|
use CodeIgniter\Database\Migration;
|
||||||
|
|
||||||
|
class AddClienteNoBasePODnoHQ extends Migration
|
||||||
|
{
|
||||||
|
protected array $COLUMNS = [
|
||||||
|
"no_envio_base" => [
|
||||||
|
"type" => "TINYINT",
|
||||||
|
"default" => 0,
|
||||||
|
],
|
||||||
|
"forzar_rotativa_pod" => [
|
||||||
|
"type" => "TINYINT",
|
||||||
|
"default" => 0,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
$this->forge->addColumn('clientes', $this->COLUMNS);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
$this->forge->dropColumn('clientes', array_keys($this->COLUMNS));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -48,6 +48,8 @@ class ClienteEntity extends \CodeIgniter\Entity\Entity
|
|||||||
"updated_at" => null,
|
"updated_at" => null,
|
||||||
"user_created_id" => 1,
|
"user_created_id" => 1,
|
||||||
"user_update_id" => 1,
|
"user_update_id" => 1,
|
||||||
|
"no_envio_base" => 0,
|
||||||
|
"forzar_rotativa_pod" => 0,
|
||||||
];
|
];
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
"comunidad_autonoma_id" => "?int",
|
"comunidad_autonoma_id" => "?int",
|
||||||
@ -70,6 +72,8 @@ class ClienteEntity extends \CodeIgniter\Entity\Entity
|
|||||||
"is_deleted" => "int",
|
"is_deleted" => "int",
|
||||||
"user_created_id" => "int",
|
"user_created_id" => "int",
|
||||||
"user_update_id" => "int",
|
"user_update_id" => "int",
|
||||||
|
"no_envio_base" => "boolean",
|
||||||
|
"forzar_rotativa_pod" => "boolean",
|
||||||
];
|
];
|
||||||
|
|
||||||
public function comercial() : ?UserEntity
|
public function comercial() : ?UserEntity
|
||||||
|
|||||||
@ -46,6 +46,8 @@ return [
|
|||||||
'userCreatedId' => 'User Created ID',
|
'userCreatedId' => 'User Created ID',
|
||||||
'userUpdateId' => 'User Update ID',
|
'userUpdateId' => 'User Update ID',
|
||||||
'vencimiento' => 'Vencimiento',
|
'vencimiento' => 'Vencimiento',
|
||||||
|
'removeEnvioBase' => 'No añadir Envio Base',
|
||||||
|
'forzarRotativaPod' => 'Forzar rotativa en POD',
|
||||||
|
|
||||||
'direccionesEnvio' => 'Direcciones de Envío',
|
'direccionesEnvio' => 'Direcciones de Envío',
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,8 @@ class ClienteModel extends \App\Models\BaseModel
|
|||||||
"comentarios",
|
"comentarios",
|
||||||
"user_created_id",
|
"user_created_id",
|
||||||
"user_update_id",
|
"user_update_id",
|
||||||
|
"no_envio_base",
|
||||||
|
"forzar_rotativa_pod",
|
||||||
];
|
];
|
||||||
protected $returnType = ClienteEntity::class;
|
protected $returnType = ClienteEntity::class;
|
||||||
protected $useSoftDeletes = true;
|
protected $useSoftDeletes = true;
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class EmailService
|
|||||||
public function send(string $subject, string $body, $recipient): bool
|
public function send(string $subject, string $body, $recipient): bool
|
||||||
{
|
{
|
||||||
|
|
||||||
$skEnv = env('sk_environment', 'production'); // fallback a producción si no está definido
|
$skEnv = env('SK_ENVIRONMENT', 'production'); // fallback a producción si no está definido
|
||||||
|
|
||||||
// Si no estamos en producción, forzar el destinatario a uno fijo
|
// Si no estamos en producción, forzar el destinatario a uno fijo
|
||||||
if ($skEnv !== 'production') {
|
if ($skEnv !== 'production') {
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class PresupuestoClienteService extends BaseService
|
|||||||
if ($total_plana < 0 && $total_rotativa < 0)
|
if ($total_plana < 0 && $total_rotativa < 0)
|
||||||
return [];
|
return [];
|
||||||
else {
|
else {
|
||||||
if ($total_plana > $total_rotativa)
|
if ($total_plana > $total_rotativa && $data['forzarRotativa'] == 0)
|
||||||
return $plana;
|
return $plana;
|
||||||
else
|
else
|
||||||
return [$rotativa];
|
return [$rotativa];
|
||||||
|
|||||||
@ -1983,4 +1983,55 @@ class PresupuestoService extends BaseService
|
|||||||
|
|
||||||
return $peso;
|
return $peso;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null){
|
||||||
|
|
||||||
|
$precio_total_asignado = 0;
|
||||||
|
$precio_unidad_asignado = $precio_unidad;
|
||||||
|
$warning = false;
|
||||||
|
|
||||||
|
$model = model('App\Models\Presupuestos\PresupuestoModel');
|
||||||
|
if($precio_unidad != null && $unidades != null){
|
||||||
|
$precio_total_asignado = round(floatval($precio_unidad) * intval($unidades), 2);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$precio_total_asignado = floatval($precio_total);
|
||||||
|
}
|
||||||
|
$presupuesto = $model->find($id);
|
||||||
|
$costes = floatval($presupuesto->total_costes);
|
||||||
|
$envio_base = floatval($presupuesto->envio_base);
|
||||||
|
if($costes + $envio_base > $precio_total_asignado){
|
||||||
|
$precio_total_asignado = round($costes + $envio_base, 2);
|
||||||
|
$precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
|
||||||
|
$warning = true;
|
||||||
|
}
|
||||||
|
$total_margenes = $precio_total_asignado - $costes - $envio_base;
|
||||||
|
|
||||||
|
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
|
||||||
|
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
|
||||||
|
|
||||||
|
$factor = ($precio_total_asignado - floatval($presupuesto->envio_base)
|
||||||
|
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactor;
|
||||||
|
|
||||||
|
$factorPonderado = ($precio_total_asignado - floatval($presupuesto->envio_base)
|
||||||
|
- floatval($presupuesto->total_coste_envios) - floatval($presupuesto->total_margen_envios)) / $sumForFactorPonderado;
|
||||||
|
|
||||||
|
if ($presupuesto) {
|
||||||
|
|
||||||
|
$presupuesto->total_margenes = $total_margenes;
|
||||||
|
$presupuesto->total_aceptado = $precio_total_asignado;
|
||||||
|
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
|
||||||
|
$presupuesto->total_antes_descuento = $precio_total_asignado;
|
||||||
|
$presupuesto->total_precio_unidad = $precio_unidad_asignado;
|
||||||
|
$presupuesto->total_factor = round($factor, 2);
|
||||||
|
$presupuesto->total_factor_ponderado = round($factorPonderado, 2);
|
||||||
|
$model->update($id, $presupuesto);
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"success" => true,
|
||||||
|
"warning" => $warning,
|
||||||
|
"new_total" => $precio_total_asignado,
|
||||||
|
"new_precio_unidad" => $precio_unidad_asignado,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -521,6 +521,28 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="form-check">
|
||||||
|
<label for="removeEnvioBase" class="form-check-label">
|
||||||
|
<input type="checkbox" id="removeEnvioBase"
|
||||||
|
name="no_envio_base" value="1"
|
||||||
|
class="form-check-input"<?= $clienteEntity->no_envio_base == true ? 'checked' : ''; ?>>
|
||||||
|
<?= lang('Clientes.removeEnvioBase') ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="form-check">
|
||||||
|
<label for="rotativaPOD" class="form-check-label">
|
||||||
|
<input type="checkbox" id="rotativaPOD"
|
||||||
|
name="forzar_rotativa_pod" value="1"
|
||||||
|
class="form-check-input"<?= $clienteEntity->forzar_rotativa_pod == true ? 'checked' : ''; ?>>
|
||||||
|
<?= lang('Clientes.forzarRotativaPod') ?>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row g-3 mb-3">
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<label for="tiradaFlexible" class="form-check-label">
|
<label for="tiradaFlexible" class="form-check-label">
|
||||||
|
|||||||
@ -169,12 +169,21 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
dataTable.row($row).data(rowData).draw(false); // Redibujar la fila SIN perder scroll ni filtros
|
dataTable.row($row).data(rowData).draw(false); // Redibujar la fila SIN perder scroll ni filtros
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let html = skUrl
|
||||||
|
? `La fila se importó exitosamente.<br><br><a href="${skUrl}" target="_blank" class="btn btn-primary mt-2">Ver presupuesto</a>`
|
||||||
|
: 'La fila se importó exitosamente.';
|
||||||
|
let icon = 'success';
|
||||||
|
|
||||||
|
if (result.price_warning) {
|
||||||
|
html = skUrl ? `La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).<br><br><a href="${skUrl}" target="_blank" class="btn btn-primary mt-2">Ver presupuesto</a>`
|
||||||
|
: 'La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).';
|
||||||
|
icon = 'warning';
|
||||||
|
}
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Importado correctamente',
|
title: 'Importado correctamente',
|
||||||
html: skUrl
|
html: html,
|
||||||
? `La fila se importó exitosamente.<br><br><a href="${skUrl}" target="_blank" class="btn btn-primary mt-2">Ver presupuesto</a>`
|
icon: icon,
|
||||||
: 'La fila se importó exitosamente.',
|
|
||||||
icon: 'success',
|
|
||||||
confirmButtonText: 'Aceptar',
|
confirmButtonText: 'Aceptar',
|
||||||
buttonsStyling: true,
|
buttonsStyling: true,
|
||||||
customClass: { confirmButton: 'btn btn-success' }
|
customClass: { confirmButton: 'btn btn-success' }
|
||||||
@ -252,6 +261,9 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
}).then(async (result) => {
|
}).then(async (result) => {
|
||||||
if (!result.isConfirmed) return;
|
if (!result.isConfirmed) return;
|
||||||
|
|
||||||
|
// array para contener los IDs que no se han podido ajustar
|
||||||
|
let idsNoAjustados = [];
|
||||||
|
|
||||||
for (const fila of filasAptas) {
|
for (const fila of filasAptas) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/importador/catalogo/importar-fila', {
|
const response = await fetch('/importador/catalogo/importar-fila', {
|
||||||
@ -268,6 +280,10 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
if (response.ok && result.status === 200) {
|
if (response.ok && result.status === 200) {
|
||||||
const skUrl = result.data?.sk_url?.replace('presupuestocliente', 'presupuestoadmin') ?? null;
|
const skUrl = result.data?.sk_url?.replace('presupuestocliente', 'presupuestoadmin') ?? null;
|
||||||
|
|
||||||
|
if (result.price_warning) {
|
||||||
|
idsNoAjustados.push(result.data.sk_id);
|
||||||
|
}
|
||||||
|
|
||||||
if (skUrl) {
|
if (skUrl) {
|
||||||
fila.rowData[6] = `<a href="${skUrl}" target="_blank" class="btn btn-sm btn-primary">Ver presupuesto</a>`;
|
fila.rowData[6] = `<a href="${skUrl}" target="_blank" class="btn btn-sm btn-primary">Ver presupuesto</a>`;
|
||||||
} else {
|
} else {
|
||||||
@ -286,10 +302,16 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let text = 'Se han procesado todas las filas seleccionadas.';
|
||||||
|
let icon = 'success';
|
||||||
|
if (idsNoAjustados.length > 0) {
|
||||||
|
text = 'Se han procesado todas las filas seleccionadas, pero no se han podido ajustar los precios de los siguientes presupuestos: ' + idsNoAjustados.join(', ');
|
||||||
|
icon = 'warning';
|
||||||
|
}
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Importación finalizada',
|
title: 'Importación finalizada',
|
||||||
text: 'Se han procesado todas las filas seleccionadas.',
|
text: text,
|
||||||
icon: 'success',
|
icon: icon,
|
||||||
confirmButtonText: 'Aceptar',
|
confirmButtonText: 'Aceptar',
|
||||||
buttonsStyling: true,
|
buttonsStyling: true,
|
||||||
customClass: { confirmButton: 'btn btn-success' }
|
customClass: { confirmButton: 'btn btn-success' }
|
||||||
|
|||||||
Reference in New Issue
Block a user