mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
añadido generar factura desde pedido
This commit is contained in:
@ -7,6 +7,7 @@ use App\Entities\Facturas\FacturaEntity;
|
||||
use App\Models\Clientes\ClienteModel;
|
||||
use App\Models\Collection;
|
||||
use Hermawan\DataTables\DataTable;
|
||||
use Exception;
|
||||
|
||||
class Facturas extends \App\Controllers\BaseResourceController
|
||||
{
|
||||
@ -463,6 +464,37 @@ class Facturas extends \App\Controllers\BaseResourceController
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($id = null)
|
||||
{
|
||||
|
||||
$user_id = auth()->user()->id;
|
||||
$datetime = (new \CodeIgniter\I18n\Time("now"));
|
||||
$rawResult = $this->model->where('id', $id)
|
||||
->set([
|
||||
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
||||
'user_updated_id' => $user_id,
|
||||
])
|
||||
->update();
|
||||
if (!$rawResult) {
|
||||
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
|
||||
}
|
||||
|
||||
$modelLineas = model('\App\Models\Facturas\FacturaLineaModel');
|
||||
$rawResult = $modelLineas->where('factura_id', $id)
|
||||
->set([
|
||||
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
|
||||
'user_updated_id' => $user_id,
|
||||
])
|
||||
->update();
|
||||
|
||||
$this->model->db->query('DELETE FROM facturas_pedidos_lineas WHERE factura_id=' . $id);
|
||||
|
||||
// $message = lang('Basic.global.deleteSuccess', [$objName]); IMN commented
|
||||
$message = lang('Basic.global.deleteSuccess', [lang('Basic.global.record')]);
|
||||
$response = $this->respondDeleted(['id' => $id, 'msg' => $message]);
|
||||
return $response;
|
||||
}
|
||||
|
||||
|
||||
public function menuPedidosPendientes($cliente_id)
|
||||
{
|
||||
@ -608,81 +640,102 @@ class Facturas extends \App\Controllers\BaseResourceController
|
||||
}
|
||||
}
|
||||
|
||||
public function addLineaPedidoImpresion($factura_id)
|
||||
public function addLineaPedidoImpresion($factura_id, $data = -1)
|
||||
{
|
||||
|
||||
if ($this->request->isAJAX()) {
|
||||
$model_pedido_linea = model('\App\Models\Pedidos\PedidoLineaModel');
|
||||
$model_presupuesto = model('\App\Models\Presupuestos\PresupuestoModel');
|
||||
$model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel');
|
||||
|
||||
try {
|
||||
if ($this->request) {
|
||||
if ($this->request->isAJAX())
|
||||
$pedido_linea_id = $this->request->getPost('lineaPedido') ?? 0;
|
||||
$linea = $model_pedido_linea->find($pedido_linea_id);
|
||||
} else {
|
||||
if ($data == -1) {
|
||||
return "Error: sin datos";
|
||||
}
|
||||
$pedido_linea_id = $data;
|
||||
}
|
||||
|
||||
$factura = $this->model->find($factura_id);
|
||||
$model_pedido_linea = model('\App\Models\Pedidos\PedidoLineaModel');
|
||||
$model_presupuesto = model('\App\Models\Presupuestos\PresupuestoModel');
|
||||
$model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel');
|
||||
$model_factura = model('\App\Models\Facturas\FacturaModel');
|
||||
|
||||
if ($factura) {
|
||||
try {
|
||||
|
||||
if ($linea) {
|
||||
$presupuesto = $model_presupuesto->find($linea->presupuesto_id);
|
||||
$linea = $model_pedido_linea->find($pedido_linea_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);
|
||||
$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;
|
||||
$factura = $model_factura->find($factura_id);
|
||||
|
||||
$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 ($factura) {
|
||||
|
||||
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($model_factura->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;
|
||||
|
||||
$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,
|
||||
];
|
||||
|
||||
$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
|
||||
];
|
||||
|
||||
$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);
|
||||
if ($this->request) {
|
||||
if ($this->request->isAJAX())
|
||||
return $this->respond($data);
|
||||
} else {
|
||||
// remove csrf token
|
||||
unset($data[$csrfTokenName]);
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
$data = [
|
||||
'error' => 1,
|
||||
'error_text' => $e->getMessage(),
|
||||
$csrfTokenName => $newTokenHash
|
||||
];
|
||||
return $this->respond($data);
|
||||
} else {
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
if ($this->request) {
|
||||
if ($this->request->isAJAX())
|
||||
return $this->respond($data);
|
||||
} else {
|
||||
unset($data[$csrfTokenName]);
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Controllers\Pedidos;
|
||||
use App\Controllers\BaseController;
|
||||
use App\Controllers\Facturacion\Facturas;
|
||||
use App\Entities\Pedidos\PedidoEntity;
|
||||
use App\Models\Collection;
|
||||
use App\Models\Pedidos\PedidoModel;
|
||||
@ -366,6 +367,74 @@ class Pedido extends \App\Controllers\BaseResourceController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function addFactura(){
|
||||
|
||||
if($this->request->isAJAX()){
|
||||
|
||||
|
||||
$modelFactura = model('App\Models\Facturas\FacturaModel');
|
||||
$modelFacturaLinea = model('App\Models\Facturas\FacturaLineaModel');
|
||||
|
||||
$pedido_id = $this->request->getPost('pedido_id');
|
||||
$serie_id = $this->request->getPost('serie_id');
|
||||
|
||||
$datosFactura = $this->model->obtenerDatosForFactura($pedido_id);
|
||||
|
||||
if(count($datosFactura) == 0){
|
||||
return $this->respond(['status' => 'error', 'message' => 'Error obteniendo datos de factura']);
|
||||
}
|
||||
|
||||
$datosFactura = $datosFactura[0];
|
||||
|
||||
$modelFactura->insert([
|
||||
'cliente_id' => $datosFactura->cliente_id,
|
||||
'serie_id' => $serie_id,
|
||||
'estado' => 'borrador',
|
||||
'estado_pago' => 'pendiente',
|
||||
'fecha_factura_at' => date('Y-m-d'),
|
||||
'cliente_nombre' => $datosFactura->cliente_nombre,
|
||||
'cliente_cif' => $datosFactura->cliente_cif,
|
||||
'cliente_pais' => $datosFactura->cliente_pais,
|
||||
'cliente_address' => $datosFactura->cliente_direccion,
|
||||
'cliente_cp' => $datosFactura->cliente_cp,
|
||||
'cliente_cuidad' => $datosFactura->cliente_ciudad,
|
||||
'cliente_provincia' => $datosFactura->cliente_provincia,
|
||||
'user_created_id' => auth()->user()->id,
|
||||
'user_updated_id' => auth()->user()->id
|
||||
]);
|
||||
|
||||
$factura_id = $modelFactura->getInsertID();
|
||||
|
||||
if($factura_id){
|
||||
|
||||
$model_pedido_linea = model('\App\Models\Pedidos\PedidoLineaModel');
|
||||
$lineas = $model_pedido_linea->where('pedido_id', $pedido_id)->first();
|
||||
$facturas = new Facturas();
|
||||
$result = $facturas->addLineaPedidoImpresion($factura_id, $lineas->id);
|
||||
if($result['error'] == 0){
|
||||
// Se actualiza el precio total de la factura obtenido de la linea añadida
|
||||
$linea_added = $modelFacturaLinea->where('factura_id', $factura_id)->first();
|
||||
$modelFactura->set([
|
||||
'base' => $linea_added->base,
|
||||
'total' => $linea_added->total,
|
||||
'pendiente' => $linea_added->total,
|
||||
])->where('id', $factura_id)->update();
|
||||
return $this->respond(['status' => 'success', 'id' => $factura_id, 'message' => lang('Basic.global.success')]);
|
||||
}else{
|
||||
return $this->respond(['status' => 'error', 'message' => 'Error insertando lineas de factura']);
|
||||
}
|
||||
}
|
||||
|
||||
return $this->respond(['status' => 'error', 'message' => 'Error insertando factura']);
|
||||
|
||||
}else{
|
||||
return $this->failUnauthorized('Invalid request', 403);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function obtenerDatosFormulario(&$pedidoEntity){
|
||||
|
||||
$datos = $this->model->obtenerDatosForm($pedidoEntity->id);
|
||||
|
||||
Reference in New Issue
Block a user