diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 8ccde276..9ddf7463 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -669,7 +669,7 @@ $routes->group('facturas', ['namespace' => 'App\Controllers\Facturacion'], funct $routes->post('datatable/(:any)', 'FacturasLineas::datatable/$1', ['as' => 'dataTableOfLineasFacturas']); $routes->post('menuPedidosPendientes/(:num)', 'Facturas::menuPedidosPendientes/$1', ['as' => 'menuPedidosPendientesImpresion']); $routes->post('addLineaPedidoImpresion/(:num)', 'Facturas::addLineaPedidoImpresion/$1', ['as' => 'addLineaPedidoImpresion2Factura']); - $routes->post('addLineaPedidoImpresion/(:num)', 'Facturas::addLineaPedidoImpresion/$1', ['as' => 'addLineaPedidoImpresion2Factura']); + $routes->post('addExcedentes/(:any)', 'Facturas::addExcedentes/$1', ['as' => 'addLineaExcedentes']); $routes->get('deleteLinea/(:any)', 'FacturasLineas::deleteLinea/$1', ['as' => 'deleteLineaFactura']); $routes->get('delete/(:any)', 'Facturas::delete/$1', ['as' => 'borrarFactura']); $routes->post('deleteFacturaLineaPedido', 'Facturas::deleteLineaPedidoImpresion', ['as' => 'deleteLineaPedidoImpresion']); diff --git a/ci4/app/Controllers/Facturacion/Facturas.php b/ci4/app/Controllers/Facturacion/Facturas.php index abf1db51..d21c2bf2 100755 --- a/ci4/app/Controllers/Facturacion/Facturas.php +++ b/ci4/app/Controllers/Facturacion/Facturas.php @@ -392,13 +392,16 @@ class Facturas extends \App\Controllers\BaseResourceController $postData = $this->request->getPost(); + $pendiente = $postData['pendiente'] ?? 0; + $total = $postData['total'] ?? 0; + $data = [ 'base' => $postData['base'] ?? 0, - 'total' => $postData['total'] ?? 0, - 'pendiente' => $postData['pendiente'] ?? 0, + 'total' => $total, + 'pendiente' => $pendiente, 'total_pagos' => $postData['total_pagos'] ?? 0, 'user_updated_id' => auth()->user()->id, - 'estado_pago' => (intval($postData['pendiente'] ?? 0)==0) ? 'pagada' : 'pendiente', + 'estado_pago' => (intval($pendiente)==0 && intval($total)!=0) ? 'pagada' : 'pendiente', ]; $newTokenHash = csrf_hash(); @@ -422,6 +425,54 @@ class Facturas extends \App\Controllers\BaseResourceController } } + public function addExcedentes($factura_id){ + + if ($this->request->isAJAX()) { + $model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel'); + + $postData = $this->request->getPost(); + $cantidad = $postData['cantidad'] ?? 0; + $precio_unidad = $postData['precio_unidad'] ?? 0; + $iva = $postData['iva'] ?? 0; + $descripcion = $postData['descripcion'] ?? ''; + $descuento = $postData['descuento'] ?? 0; + $pedido_linea_impresion_id = $postData['pedido_linea_impresion_id'] ?? null; + $pedido_linea_maquetacion_id = $postData['pedido_linea_maquetacion_id'] ?? null; + $pedido_id = $postData['pedido_id'] ?? 0; + + $nuevo_precio_unidad = round($precio_unidad*(100-floatval($descuento))/100, 4); + $base = round($cantidad * $nuevo_precio_unidad, 2); + $total_iva = round($base * $iva / 100, 2); + + $data = (object)[ + 'factura_id'=>$factura_id, + 'pedido_linea_impresion_id'=>$pedido_linea_impresion_id, + 'pedido_linea_maquetacion_id'=>$pedido_linea_maquetacion_id, + 'descripcion'=>$newString = preg_replace_callback('/Impresión de (\d+) ejemplares/', function ($matches) use ($cantidad) { + return 'Impresión de ' . $cantidad . ' ejemplares'; + }, $descripcion), + 'cantidad'=>$cantidad, + 'precio_unidad'=> $nuevo_precio_unidad, + 'iva' => $iva, + 'base' => $base, + 'total_iva' => $total_iva, + 'total' => round($base + $total_iva, 2), + 'user_updated_id' => auth()->user()->id, + ]; + + $model_factura_linea->insert($data); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data_ret = [ + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data_ret); + } + else { + return $this->failUnauthorized('Invalid request', 403); + } + } public function addLineaPedidoImpresion($factura_id){ @@ -433,48 +484,55 @@ class Facturas extends \App\Controllers\BaseResourceController try{ $pedido_linea_id = $this->request->getPost('lineaPedido') ?? 0; $linea = $model_pedido_linea->find($pedido_linea_id); + + $factura = $this->model->find($factura_id); - if($linea){ - $presupuesto = $model_presupuesto->find($linea->presupuesto_id); - if($presupuesto){ - // Se añade la linea de factura - $descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id); - $cantidad = intval($presupuesto->tirada) - intval($this->model->getCantidadLineaPedidoFacturada($linea->id)); - $base = $cantidad * floatval($presupuesto->total_precio_unidad); - $total_iva = $base * ($presupuesto->iva_reducido==1 ? 0.04 : 0.21); - // se redondea a dos decimales - $total_iva = round($total_iva, 2); - $total = $base + $total_iva; + if($factura){ - $data = (object)[ - 'factura_id'=>$factura_id, - 'pedido_linea_impresion_id'=>$linea->pedido_id, - 'descripcion'=>$descripcion[0]->concepto, - 'cantidad'=>$cantidad, - 'precio_unidad'=>$presupuesto->total_precio_unidad, - 'iva' => $presupuesto->iva_reducido==1 ? 4 : 21, - 'base' => $base, - 'total_iva' => $total_iva, - 'total' => $total, - 'user_updated_id' => auth()->user()->id, - ]; + if($linea){ + $presupuesto = $model_presupuesto->find($linea->presupuesto_id); - $model_factura_linea->insert($data); + if($presupuesto){ + // Se añade la linea de factura + $descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id); + $cantidad = intval($presupuesto->tirada) - intval($this->model->getCantidadLineaPedidoFacturada($linea->id)); + $base = $cantidad * floatval($presupuesto->total_precio_unidad); + $base = round($base, 2); + $total_iva = $base * ($presupuesto->iva_reducido==1 ? 0.04 : 0.21); + // se redondea a dos decimales + $total_iva = round($total_iva, 2); + $total = $base + $total_iva; - $id = $model_factura_linea->getInsertID(); - - if($id){ - - $model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad); - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - $data = [ - 'error' => 0, - 'id' => $id, - $csrfTokenName => $newTokenHash + $data = (object)[ + 'factura_id'=>$factura_id, + 'pedido_linea_impresion_id'=>$linea->pedido_id, + 'descripcion'=>$descripcion[0]->concepto, + 'cantidad'=>$cantidad, + 'precio_unidad'=>$presupuesto->total_precio_unidad, + 'iva' => $presupuesto->iva_reducido==1 ? 4 : 21, + 'base' => $base, + 'total_iva' => $total_iva, + 'total' => $total, + 'user_updated_id' => auth()->user()->id, ]; - return $this->respond($data); + + $model_factura_linea->insert($data); + + $id = $model_factura_linea->getInsertID(); + + if($id){ + + $model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'error' => 0, + 'id' => $id, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } } } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index aa2cdbdf..03ff9410 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -1073,14 +1073,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController try { $return_data = []; - if ($extra_info) { - $info = [ - 'merma' => 0, - 'lomo_cubierta' => 0.0, - 'lomo_sobrecubierta' => 0.0, - 'user_id' => auth()->user()->id, - ]; - } + $info = [ + 'merma' => 0, + 'lomo_cubierta' => 0.0, + 'lomo_sobrecubierta' => 0.0, + 'user_id' => auth()->user()->id, + ]; $tirada = $datos_entrada['tirada']; $tamanio = $datos_entrada['tamanio']; @@ -1568,11 +1566,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController )); } + $info['lomo_cubierta'] = $lomo; + $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; + $return_data['info'] = $info; + + if ($extra_info) { // && $tirada[$t] == $selected_tirada) { - $info['lomo_cubierta'] = $lomo; - $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; - $return_data['info'] = $info; $return_data['info']['interior'] = $interior; $return_data['info']['cubierta'] = $cubierta; $return_data['info']['sobrecubierta'] = $linea_sobrecubierta; diff --git a/ci4/app/Models/Facturas/FacturaLineaModel.php b/ci4/app/Models/Facturas/FacturaLineaModel.php index 757f4bad..b808ac8c 100644 --- a/ci4/app/Models/Facturas/FacturaLineaModel.php +++ b/ci4/app/Models/Facturas/FacturaLineaModel.php @@ -40,10 +40,14 @@ class FacturaLineaModel extends \App\Models\BaseModel { t1.pedido_linea_impresion_id AS pedido_linea_impresion_id, t1.pedido_maquetacion_id AS pedido_maquetacion_id, t1.descripcion AS descripcion, t1.cantidad as cantidad, t1.precio_unidad AS precio_unidad, t1.iva AS iva, t1.base AS base, t1.total_iva AS total_iva, t1.total AS total, t1.data AS data, t2.pedido_id AS pedido_id, - t3.total_aceptado AS total_aceptado" + t3.total_aceptado AS total_aceptado, t4.tirada_flexible AS tirada_flexible, t4.descuento_tirada_flexible AS descuento_tirada_flexible, + t6.cantidad AS cantidad_albaran" ) ->join("pedidos_linea t2", "t2.id = t1.pedido_linea_impresion_id", "left") ->join("presupuestos t3", "t3.id = t2.presupuesto_id", "left") + ->join("clientes t4", "t4.id = t3.cliente_id", "left") + ->join("albaranes t5", "t5.pedido_id = t2.pedido_id", "left") + ->join("albaranes_lineas t6", "t6.albaran_id = t5.id", "left") ->where("t1.factura_id", $factura_id) ->where("t1.deleted_at", null); diff --git a/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php b/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php index 1b616980..453074b7 100644 --- a/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php +++ b/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php @@ -118,11 +118,10 @@ $('#addNewPedidoImpresion').on('click', function(){ yeniden(response.= csrf_token() ?>); // se ajustan el ancho de las columnas - $('#tableOfLineasFactura').DataTable().columns.adjust().draw(); $('#pedidoImpresion').val(null).trigger('change'); // Se actualiza la tabla de lineas de factura tableLineas.clearPipeline(); - tableLineas.draw(); + $('#tableOfLineasFactura').DataTable().columns.adjust().draw(); } }); }); diff --git a/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php b/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php index 2a4142f8..1c8dcbaf 100644 --- a/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php +++ b/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php @@ -255,7 +255,7 @@ var tableLineas = $('#tableOfLineasFactura').DataTable({ error_text = 'El total del pedido ('+ total_aceptado + '€) no coincide con la línea ('+ subtotal + '€)'; } - return ` + var returned_data = `