Merge branch 'main' into dev/chat

This commit is contained in:
amazuecos
2024-09-07 20:30:51 +02:00
55 changed files with 2452 additions and 240 deletions

View File

@ -0,0 +1,70 @@
<?php
namespace App\Controllers\Excel;
use App\Controllers\BaseController;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class PrintLineas extends BaseController
{
public function generateExcel($factura_id = null)
{
// Modelos
$lineasFacturaModel = model('App\Models\Facturas\FacturaLineaModel');
$infoLineasFactura = $lineasFacturaModel->getResourceForExcel($factura_id)->get()->getResultObject();
// Crear un nuevo Spreadsheet
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// Especificar encabezados
$headers = [
'Factura',
'ID Pedido',
'Ref. Cliente',
'Base'
];
// Establecer los encabezados en la primera fila
$column = 'A';
foreach ($headers as $header) {
$sheet->setCellValue($column . '1', $header);
$column++;
}
// Rellenar las filas con datos
$rowNumber = 2; // Empezar en la segunda fila
foreach ($infoLineasFactura as $infoLineaFactura) {
$column = 'A';
foreach ($infoLineaFactura as $cell) {
$sheet->setCellValue($column . $rowNumber, $cell);
$column++;
}
$rowNumber++;
}
// Ajustar automáticamente el tamaño de las columnas
foreach (range('A', $column) as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
// Crear un escritor para guardar el archivo
$writer = new Xlsx($spreadsheet);
// Configurar la respuesta para descarga
$fileName = 'lineas-pedido.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $fileName . '"');
header('Cache-Control: max-age=0');
// Escribir el archivo a la salida
$writer->save('php://output');
exit;
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace App\Controllers\Pdf;
use App\Controllers\BaseController;
class PrintFacturas extends BaseController
{
public function index($id_factura)
{
$facturaModel = model('App\Models\Facturas\FacturaModel');
$lineasFacturaModel = model('App\Models\Facturas\FacturaLineaModel');
$data['factura'] = $facturaModel->getResourceForPdf($id_factura)->get()->getRow();
$data['lineas_factura'] = $lineasFacturaModel->getResourceForPdf($id_factura)->get()->getResultObject();
$data['resumen_por_iva'] = $lineasFacturaModel->getResourceResumenIVAsForPdf($id_factura)->get()->getResultObject();
return view(getenv('theme.path') . 'pdfs/factura', $data);
}
public function generar($id_factura)
{
// Cargar modelos
$facturaModel = model('App\Models\Facturas\FacturaModel');
$lineasFacturaModel = model('App\Models\Facturas\FacturaLineaModel');
// Informacion del presupuesto
$data['factura'] = $facturaModel->getResourceForPdf($id_factura)->get()->getRow();
$data['lineas_factura'] = $lineasFacturaModel->getResourceForPdf($id_factura)->get()->getResultObject();
$data['resumen_por_iva'] = $lineasFacturaModel->getResourceResumenIVAsForPdf($id_factura)->get()->getResultObject();
// Crear una instancia de Dompdf
$options = new \Dompdf\Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isPhpEnabled', true);
$options->set('isRemoteEnabled', true);
$dompdf = new \Dompdf\Dompdf($options);
// Contenido HTML del documento
$dompdf->loadHtml(view(getenv('theme.path').'pdfs/factura', $data));
// Establecer el tamaño del papel
$dompdf->setPaper('A4', 'portrait');
// Renderizar el PDF
$dompdf->render();
// Obtener el contenido generado
$output = $dompdf->output();
// Establecer las cabeceras para visualizar en lugar de descargar
$file_name = $data['factura']->numero . ".pdf";
return $this->response
->setStatusCode(200)
->setHeader('Content-Type', 'application/pdf')
->setHeader('Content-Disposition', 'inline; filename="' . $file_name . '"')
->setHeader('Cache-Control', 'private, max-age=0, must-revalidate')
->setHeader('Pragma', 'public')
->setHeader('Content-Length', strlen($output))
->setBody($output);
}
}

View File

@ -5,7 +5,7 @@ use App\Controllers\BaseController;
use App\Entities\Pedidos\PedidoEntity;
use App\Models\Collection;
use App\Models\Pedidos\PedidoModel;
use App\Services\PedidoXMLService;
class Pedido extends \App\Controllers\BaseResourceController
{
@ -21,7 +21,6 @@ class Pedido extends \App\Controllers\BaseResourceController
protected $indexRoute = 'pedidoList';
public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
{
$this->viewData['pageTitle'] = lang('Pedidos.moduleTitle');
@ -327,5 +326,11 @@ class Pedido extends \App\Controllers\BaseResourceController
$pedidoEntity->fecha_encuadernado_text = $pedidoEntity->fecha_encuadernado ? date('d/m/Y', strtotime($pedidoEntity->fecha_encuadernado)) : '';
$pedidoEntity->fecha_entrega_externo_text = $pedidoEntity->fecha_entrega_externo ? date('d/m/Y', strtotime($pedidoEntity->fecha_entrega_externo)) : '';
}
public function get_xml_pedido($pedido_id)
{
$data = PedidoXMLService::generate_xml($pedido_id);
// $xml_service = new PedidoXMLService($this->model);
return $this->respond($data);
}
}

View File

@ -99,12 +99,13 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
$tarifa_acabado_id = $reqData['tarifa_acabado_id'] ?? 0;
$tirada = $reqData['tirada'] ?? 0;
$proveedor_id = $reqData['proveedor_id'] ?? -1;
$POD = $reqData['POD'] ?? 0;
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $POD);
$values = $this->model->getPrecioTarifa($tarifa_acabado_id, $tirada, $proveedor_id, $POD);
$data = [
'values' => $values,
@ -119,4 +120,39 @@ class Presupuestoacabados extends \App\Controllers\BaseResourceController
}
public function menuItems()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
try{
$tarifa_id = $reqData['tarifa_id'] ?? -1;
$tirada = $reqData['tirada'] ?? 0;
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$menu = $this->model->getProveedoresForSelector($tarifa_id, $tirada);
$data = [
'menu' => $menu,
$csrfTokenName => $newTokenHash
];
}
catch(Exception $e){
$data = [
'error' => $e,
$csrfTokenName => $newTokenHash
];
}
finally{
return $this->respond($data);
}
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -3,6 +3,7 @@
namespace App\Controllers\Presupuestos;
use App\Entities\Presupuestos\PresupuestoEntity;
use App\Libraries\SafekatFtpClient;
use App\Models\Collection;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\TipoPresupuestoModel;
@ -118,7 +119,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datosPresupuesto->tapa = 'blanda';
$datosPresupuesto->clienteList = $this->getClienteListItems($clienteId ?? null);
$datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16];
$presupuestoEntity->estado_id = 1;
$presupuestoEntity->paginas_por_cuadernillo = 32;
$this->viewData['formAction'] = 'add';
@ -185,6 +188,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if($presupuestoEntity->estado_id == 2){
$this->generarResumen($presupuestoEntity);
}
$datosPresupuesto->paginasCuadernillo = [32, 28, 24, 20 , 16];
$presupuestoEntity->paginas_por_cuadernillo = $this->obtenerPaginasCuadernillo($presupuestoEntity);
$this->viewData['formAction'] = 'edit';
@ -371,6 +377,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$servicios = $reqData['servicios'] ?? [];
$paginasCuadernillo = $reqData['paginasCuadernillo'] ?? null;
$datos_presupuesto = array(
'tirada' => $tirada,
'tamanio' => $tamanio,
@ -378,6 +386,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'clienteId' => $cliente_id,
'isColor' => $isColor,
'isHq' => $isHq,
'paginasCuadernillo' => $paginasCuadernillo,
'interior' => array(
'papel_generico' => $papel_generico,
@ -600,6 +609,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$cliente_id = $reqData['datos_libro']['clienteId'] ?? -1;
$isColor = intval($reqData['datos_libro']['isColor']) ?? 0;
$isHq = intval($reqData['datos_libro']['isHq']) ?? 0;
$paginasCuadernillo = $reqData['datos_libro']['paginasCuadernillo'] ?? null;
// Interior
$papel_generico = [
@ -637,6 +647,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'clienteId' => $cliente_id,
'isColor' => $isColor,
'isHq' => $isHq,
'paginasCuadernillo' => $paginasCuadernillo,
'interior' => array(
'papel_generico' => $papel_generico,
@ -882,7 +893,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
if(!is_null($new_name)){
move_uploaded_file($tmp_name, WRITEPATH . 'uploads/presupuestos/' . $new_name);
$path = WRITEPATH . 'uploads/presupuestos/' . $new_name;
move_uploaded_file($tmp_name,$path);
$ftp = new SafekatFtpClient();
$ftp->uploadFilePresupuesto($presupuesto_id);
}
}
}
@ -983,6 +997,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'precio_unidad' => $servicio->precio_unidad,
'margen' => $servicio->margen,
];
// Se comprueba que $servicio tiene paginasCuadernillo
if (isset($servicio->paginas_por_cuadernillo)) {
$data['paginas_por_cuadernillo'] = $servicio->paginas_por_cuadernillo;
}
$model->insert($data);
} else if ($tipo == 'extra') {
$model = new PresupuestoServiciosExtraModel();
@ -1086,6 +1106,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$cliente_id = $datos_entrada['clienteId'] ?? -1;
$isColor = $datos_entrada['isColor'];
$isHq = $datos_entrada['isHq'];
$paginasCuadernillo = $datos_entrada['paginasCuadernillo'] ?? null;
// Interior
$papel_generico = $datos_entrada['interior']['papel_generico'];
@ -1429,6 +1450,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'alto' => $datosPedido->alto,
'POD' => $POD,
'solapas' => intval($solapasCubierta) > 0 ? 1 : 0,
'paginasCuadernillo' => $paginasCuadernillo,
]);
$costeServiciosDefecto = 0.0;
foreach ($servDefecto as $servicio) {
@ -1996,4 +2018,17 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$tipo = "" . ($isColor ? "Color" : "Negro") . " " . ($isHq ? "premium" : "estándar");
return $tipo;
}
protected function obtenerPaginasCuadernillo($presupuestoEntity){
$model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel');
$lineas = $model->getResource($presupuestoEntity->id)->get()->getResultObject();
foreach ($lineas as $linea){
// check if exist
if($linea->paginas_por_cuadernillo != null)
return $linea->paginas_por_cuadernillo;
}
return 32; // valor por defecto
}
}

View File

@ -118,6 +118,7 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle
$alto = $reqData['alto'] ?? 0;
$POD = $reqData['POD'] ?? 0;
$paginas_cuadernillo = $reqData['paginas_por_cuadernillo'] ?? null;
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
@ -125,7 +126,7 @@ class Presupuestoencuadernaciones extends \App\Controllers\BaseResourceControlle
$tarifaModel = model('App\Models\Tarifas\TarifaEncuadernacionModel');
if(is_null($tipo)){
if($tarifaModel->isTarifaPorHoras($tarifa_encuadernacion_id)){
$values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD);
$values = $this->model->getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo);
}else{
$values = $this->model->getPrecioTarifa($tarifa_encuadernacion_id, $paginas, $tirada, $ancho, $alto, $proveedor_id, $POD);
}

View File

@ -5,6 +5,10 @@ use App\Entities\Tarifas\Acabados\TarifaAcabadoEntity;
use App\Models\Collection;
use App\Models\Tarifas\Acabados\TarifaAcabadoModel;
use App\Models\Compras\ProveedorModel;
use App\Models\Compras\ProveedorTipoModel;
class TarifaAcabados extends BaseResourceController
{
@ -217,6 +221,7 @@ class TarifaAcabados extends BaseResourceController
endif; // ($requestMethod === 'post')
$this->viewData['tarifaacabadoEntity'] = $tarifaacabadoEntity;
$this->viewData['proveedores'] = $this->getProveedores();
$this->viewData['formAction'] = route_to('updateTarifaAcabado', $id);
@ -305,4 +310,12 @@ class TarifaAcabados extends BaseResourceController
}
}
private function getProveedores(){
$provTipoModel = new ProveedorTipoModel();
$provModel = new ProveedorModel();
$tipoId = $provTipoModel->getTipoId("Acabados");
return $provModel->getProvList($tipoId);
}
}

View File

@ -213,13 +213,14 @@ class TarifaAcabadosLineas extends \App\Controllers\BaseResourceController
$id_TA = $reqData['id_tarifaacabado'] ?? -1;
$searchValues = get_filter_datatables_columns($reqData);
$resourceData = $this->model->getResource("", $id_TA)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
$resourceData = $this->model->getResource($searchValues, $id_TA)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject();
return $this->respond(Collection::datatable(
$resourceData,
$this->model->getResource()->countAllResults(),
$this->model->getResource($search, $id_TA)->countAllResults()
$this->model->getResource($searchValues, $id_TA)->countAllResults()
));
} else {
return $this->failUnauthorized('Invalid request', 403);
@ -280,6 +281,7 @@ class TarifaAcabadosLineas extends \App\Controllers\BaseResourceController
->validator('Validate::notEmpty', array(
'message' => lang('TarifaAcabadoLineas.validation.margen.required'))
),
Field::inst('proveedor_id'),
Field::inst('tarifa_acabado_id'),
Field::inst('user_created_id'),
Field::inst('created_at'),
@ -297,6 +299,7 @@ class TarifaAcabadosLineas extends \App\Controllers\BaseResourceController
$process_data['tirada_min'] = $data['data'][$pkey]['tirada_min'];
$process_data['tirada_max'] = $data['data'][$pkey]['tirada_max'];
$process_data['proveedor_id'] = $data['data'][$pkey]['proveedor_id'];
$response = $this->model->checkIntervals($process_data, $pkey, $data['data'][$pkey]['tarifa_acabado_id']);
// No se pueden duplicar valores al crear o al editar
if (!empty($response)) {