viewData['pageTitle'] = lang('Pedidos.moduleTitle'); // Se indica que este controlador trabaja con soft_delete $this->viewData = ['usingServerSideDataTable' => true]; // Breadcrumbs $this->viewData['breadcrumb'] = [ ['title' => lang("App.menu_pedidos"), 'route' => "javascript:void(0);", 'active' => false], ]; parent::initController($request, $response, $logger); } public function index() { if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $this->viewData['cliente_id'] = $clienteId; $this->viewData['usingClientSideDataTable'] = true; $this->viewData['pageSubTitle'] = lang('Basic.global.ManageAllRecords', [lang('Tarifaextra.tarifaextra')]); parent::index(); } public function activos() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Pedidos.pedido')]), 'pedidoEntity' => new PedidoEntity(), 'usingServerSideDataTable' => true, 'pageTitle' => lang('Pedidos.Pedidos'), 'estadoPedidos' => 'produccion', ['title' => lang("App.menu_pedidos"), 'route' => site_url('pedidos/todos'), 'active' => true] ]; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $viewData['cliente_id'] = $clienteId; return view(static::$viewPath . 'viewPedidosList', $viewData); } public function finalizados() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Pedidos.pedido')]), 'pedidoEntity' => new PedidoEntity(), 'usingServerSideDataTable' => true, 'pageTitle' => lang('Pedidos.Pedidos'), 'estadoPedidos' => 'finalizado', ['title' => lang("App.menu_pedidos"), 'route' => site_url('pedidos/todos'), 'active' => true] ]; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $viewData['cliente_id'] = $clienteId; return view(static::$viewPath . 'viewPedidosList', $viewData); } public function validacion() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Pedidos.pedido')]), 'pedidoEntity' => new PedidoEntity(), 'usingServerSideDataTable' => true, 'pageTitle' => lang('Pedidos.Pedidos'), 'estadoPedidos' => 'validacion', ['title' => lang("App.menu_pedidos"), 'route' => site_url('pedidos/todos'), 'active' => true] ]; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $viewData['cliente_id'] = $clienteId; return view(static::$viewPath . 'viewPedidosList', $viewData); } public function cancelados() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Pedidos.pedido')]), 'pedidoEntity' => new PedidoEntity(), 'usingServerSideDataTable' => true, 'pageTitle' => lang('Pedidos.Pedidos'), 'estadoPedidos' => 'cancelado', ['title' => lang("App.menu_pedidos"), 'route' => site_url('pedidos/todos'), 'active' => true] ]; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $viewData['cliente_id'] = $clienteId; return view(static::$viewPath . 'viewPedidosList', $viewData); } public function todos() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => lang('Basic.global.ManageAllRecords', [lang('Pedidos.pedido')]), 'pedidoEntity' => new PedidoEntity(), 'usingServerSideDataTable' => true, 'pageTitle' => lang('Pedidos.Pedidos'), 'estadoPedidos' => 'todos', ['title' => lang("App.menu_pedidos"), 'route' => site_url('pedidos/todos'), 'active' => true] ]; if (auth()->user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) { // Se obtiene el cliente ID a partir del usuario de la sesion $model_user = model('App\Models\Usuarios\UserModel'); $user = $model_user->find(auth()->user()->id); $clienteId = $user->cliente_id; } else { $clienteId = -1; } $viewData['cliente_id'] = $clienteId; return view(static::$viewPath . 'viewPedidosList', $viewData); } public function cambiarEstado(){ if($this->request->isAJAX()){ $id = $this->request->getPost('id'); $estado = $this->request->getPost('estado'); $this->model->where('id', $id)->set(['estado' => $estado])->update(); return $this->respond(['status' => 'success', 'message' => lang('Basic.global.success')]); }else{ return $this->failUnauthorized('Invalid request', 403); } } public function update($id = null){ if ($this->request->isAJAX()) { $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); if ($id == null) : $data = [ 'error' => 2, $csrfTokenName => $newTokenHash ]; return $this->respond($data); endif; $id = filter_var($id, FILTER_SANITIZE_URL); $pedidoEntity = $this->model->find($id); if ($pedidoEntity == false) : $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.pedido')), $id]); $data = [ 'error' => $message, $csrfTokenName => $newTokenHash ]; return $this->respond($data); endif; if ($this->request->getPost()) : $nullIfEmpty = true; // !(phpversion() >= '8.1'); $postData = $this->request->getPost(); $sanitizedData = $this->sanitized($postData, $nullIfEmpty); // JJO $sanitizedData['user_updated_id'] = auth()->user()->id; $noException = true; if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) : if ($this->canValidate()) : try { $successfulResult = $this->model->skipValidation(true)->update($id, $sanitizedData); } catch (\Exception $e) { $noException = false; $this->dealWithException($e); } else: $this->viewData['warningMessage'] = lang('Basic.global.formErr1', [mb_strtolower(lang('Pedidos.albaran'))]); $this->session->setFlashdata('formErrors', $this->model->errors()); endif; $pedidoEntity->fill($sanitizedData); endif; if ($noException && $successfulResult) : $id = $pedidoEntity->id ?? $id; $message = lang('Basic.global.updateSuccess', [lang('Basic.global.record')]) . '.'; $data = [ 'error' => 0, $csrfTokenName => $newTokenHash ]; return $this->respond($data); endif; // $noException && $successfulResult endif; // ($requestMethod === 'post') $data = [ 'error' => 1, $csrfTokenName => $newTokenHash ]; return $this->respond($data); } else { return $this->failUnauthorized('Invalid request', 403); } } public function edit($id=null){ if ($id == null) : return $this->redirect2listView(); endif; $id = filter_var($id, FILTER_SANITIZE_URL); $pedidoEntity = $this->model->find($id); if ($pedidoEntity == false) : $message = lang('Basic.global.notFoundWithIdErr', [mb_strtolower(lang('Pedidos.pedido')), $id]); return $this->redirect2listView('sweet-error', $message); endif; $this->obtenerDatosFormulario($pedidoEntity); $this->viewData['pedidoEntity'] = $pedidoEntity; if($pedidoEntity->estado == 'validacion'){ $clienteModel = model('App\Models\Clientes\ClienteModel'); $pendiente = $clienteModel->getPendienteCobro($pedidoEntity->cliente_id); $pendiente = $pendiente[0] + $pendiente[1]; $this->viewData['importePendiente'] = $pendiente; } $modelOrden = new \App\Models\OrdenTrabajo\OrdenTrabajoModel(); $orden = $modelOrden->where('pedido_id', $pedidoEntity->id)->first(); if($orden){ $this->viewData['orden_id'] = $orden->id; } $this->viewData['boxTitle'] = lang('Basic.global.edit2') . ' ' . lang('Pedidos.moduleTitle') . ' ' . lang('Basic.global.edit3'); return $this->displayForm(__METHOD__, $id); } public function datatable(){ if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); if (!isset($reqData['draw']) || !isset($reqData['columns']) ) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr); return $response; } $start = $reqData['start'] ?? 0; $length = $reqData['length'] ?? 5; $search = $reqData['search']['value']; $requestedOrder = $reqData['order']['0']['column'] ?? 0; $order = PedidoModel::SORTABLE_TODOS[$requestedOrder >= 0 ? $requestedOrder : 0]; $dir = $reqData['order']['0']['dir'] ?? 'asc'; $estado = $reqData['estado'] ?? 'todos'; $cliente_id = $reqData['cliente_id'] ?? -1; if($estado == 'todos') $estado = ''; $showTotal = $reqData['showTotal'] ?? false; $searchValues = get_filter_datatables_columns($reqData); $model_linea = model('\App\Models\Pedidos\PedidoLineaModel'); $resourceData = $model_linea->getResource($searchValues, $estado, $cliente_id)->orderBy($order, $dir)->limit($length, $start)->get()->getResultObject(); $totalTirada = $model_linea->getSumOfTirada($searchValues, $estado, $cliente_id, $start, $length); $total = $model_linea->getSumOfTotalAceptado($searchValues, $estado, $cliente_id, $start, $length); $extra_data['total_tirada'] = $totalTirada; $extra_data['total'] = $total; $total2 = 0; if($showTotal){ $total2 = $model_linea->getTotalOfTotalAceptado($estado); $tirada2 = $model_linea->getTotalTirada($estado); $extra_data['total2'] = $total2; $extra_data['total_tirada2'] = $tirada2; } return $this->respond(Collection::datatable( $resourceData, $model_linea->getResource("", $estado)->countAllResults(), $model_linea->getResource($searchValues, $estado)->countAllResults(), "", $extra_data )); } else { return $this->failUnauthorized('Invalid request', 403); } } public function obtenerPedidosForFacturas(){ if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); $start = $reqData['start'] ?? 0; } else { return $this->failUnauthorized('Invalid request', 403); } } public function getlineas(){ if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); if (!isset($reqData['draw']) || !isset($reqData['columns']) ) { $errstr = 'No data available in response to this specific request.'; $response = $this->respond(Collection::datatable( [], 0, 0, $errstr ), 400, $errstr); return $response; } $id = $reqData['pedido_id'] ?? 0; $resourceData = $this->model->obtenerLineasPedido($id); return $this->respond(Collection::datatable( $resourceData, count($resourceData), count($resourceData) )); } else { return $this->failUnauthorized('Invalid request', 403); } } 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); $pedidoEntity->estadoText = lang('Pedidos.' . $pedidoEntity->estado); if(count($datos) > 0){ $pedidoEntity->cliente = $datos[0]->cliente; $pedidoEntity->cliente_id = $datos[0]->cliente_id; $pedidoEntity->comercial = $datos[0]->comercial; } $pedidoEntity->fecha_entrega_real_text = $pedidoEntity->fecha_entrega_real ? date('d/m/Y', strtotime($pedidoEntity->fecha_entrega_real)) : ''; $pedidoEntity->fecha_impresion_text = $pedidoEntity->fecha_impresion ? date('d/m/Y', strtotime($pedidoEntity->fecha_impresion)) : ''; $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)) : ''; $userModel = model('App\Models\UserModel'); $pedidoEntity->created_by = $userModel->getFullName($pedidoEntity->user_created_id); $pedidoEntity->updated_by = $userModel->getFullName($pedidoEntity->user_updated_id); $pedidoEntity->created_at_footer = $pedidoEntity->created_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->created_at)) : ''; $pedidoEntity->updated_at_footer = $pedidoEntity->updated_at ? date(' H:i d/m/Y', strtotime($pedidoEntity->updated_at)) : ''; } public function get_xml_pedido($pedido_id) { $data = PedidoXMLService::generate_xml($pedido_id); // $xml_service = new PedidoXMLService($this->model); return $this->respond($data); } public function to_produccion($pedido_id) { $serviceProduction = service('production'); $pedido = $this->model->find($pedido_id); $serviceProduction->setPedido($pedido); if($pedido->orden_trabajo()){ return $this->response->setJSON(["status"=>false,"data"=>$pedido->orden_trabajo(),"message" => "Ya existe una orden de trabajo para este pedido"]); }else{ $r = $serviceProduction->createOrdenTrabajo(); $this->model->set(['estado' => 'produccion'])->where('id', $pedido_id)->update(); return $this->response->setJSON(["status"=>true, "data"=>$r,"message" => "Orden trabajo creada correctamente"]); } } }