viewData['pageTitle'] = ''; $this->viewData['usingSweetAlert'] = true; parent::initController($request, $response, $logger); } public function index() { $viewData = [ 'currentModule' => static::$controllerSlug, 'pageSubTitle' => '', 'maquinasTarifasImpresion' => new Maquinaspapelesimpresion(), 'usingServerSideDataTable' => true, ]; } public function datatable() { if ($this->request->isAJAX()) { // modelos usados $tarifa_model = new MaquinasTarifasImpresionModel(); $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'] ?? 1; $requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder; $requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder; $requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder; $order = MaquinasPapelesImpresionModel::SORTABLE[$requestedOrder >= 0 ? $requestedOrder : 0]; $order2 = MaquinasPapelesImpresionModel::SORTABLE[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder]; $order3 = MaquinasPapelesImpresionModel::SORTABLE[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder]; $order4 = MaquinasPapelesImpresionModel::SORTABLE[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder]; $dir = $reqData['order']['0']['dir'] ?? 'asc'; $dir2 = $reqData['order']['1']['dir'] ?? $dir; $dir3 = $reqData['order']['2']['dir'] ?? $dir; $dir4= $reqData['order']['3']['dir'] ?? $dir; $maquina_id = $reqData['maquina_id'] ?? -1; // Para saber si el papel que se tiene que mostrar es para rotativa $isRotativa= $reqData['isRotativa'] ?? 0; // Se obtienen las líneas de las tarifas seleccionadas para esta máquina $tarifas = $tarifa_model->getResource("", $maquina_id)->get()->getResultObject(); $resourceData = $this->model->getResource($search, $isRotativa, $tarifas, $maquina_id) ->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->limit($length, $start)->get()->getResultObject(); $query =$this->model->getLastQuery(); return $this->respond(Collection::datatable( $resourceData, $this->model->getResource("", $isRotativa, $tarifas, $maquina_id)->countAllResults(), $this->model->getResource($search, $isRotativa, $tarifas, $maquina_id)->countAllResults() )); } else { return $this->failUnauthorized('Invalid request', 403); } } public function datatable_2() { if ($this->request->isAJAX()) { // modelos usados $tarifa_model = new MaquinasTarifasImpresionModel(); $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; $requestedOrder2 = $reqData['order']['1']['column'] ?? $requestedOrder; $requestedOrder3 = $reqData['order']['2']['column'] ?? $requestedOrder; $requestedOrder4 = $reqData['order']['3']['column'] ?? $requestedOrder; $order = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder >= 0 ? $requestedOrder : 0]; $order2 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder2 >= 0 ? $requestedOrder2 : $requestedOrder]; $order3 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder3 >= 0 ? $requestedOrder3 : $requestedOrder]; $order4 = MaquinasPapelesImpresionModel::SORTABLE_2[$requestedOrder4 >= 0 ? $requestedOrder4 : $requestedOrder]; $dir = $reqData['order']['0']['dir'] ?? 'asc'; $dir2 = $reqData['order']['1']['dir'] ?? $dir; $dir3 = $reqData['order']['2']['dir'] ?? $dir; $dir4= $reqData['order']['3']['dir'] ?? $dir; $papel_id = $reqData['papel_id'] ?? -1; $isRotativa = $reqData['isRotativa'] ?? -1; $resourceData = $this->model->getResource_maquinas($search, $papel_id, $isRotativa) ->orderBy($order, $dir)->orderBy($order2, $dir2)->orderBy($order3, $dir3)->orderBy($order4, $dir4)->limit($length, $start)->get()->getResultObject(); return $this->respond(Collection::datatable( $resourceData, $this->model->getResource_maquinas()->countAllResults(), $this->model->getResource_maquinas($search, $papel_id, $isRotativa)->countAllResults() )); } else { return $this->failUnauthorized('Invalid request', 403); } } public function updateTableOnChange(){ if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); $maquina_id = $reqData['maquina_id'] ?? -1; // Para saber si el papel que se tiene que mostrar es para rotativa $isRotativa= $reqData['isRotativa'] ?? 0; $isInkjet= $reqData['isInkjet'] ?? 0; // modelos usados $tarifa_model = new MaquinasTarifasImpresionModel(); $papelimpresion_model = new PapelImpresionModel(); $tarifas = $tarifa_model->getResource("", $maquina_id)->get()->getResultObject(); // 1- Se obtienen los papeles que hay seleccionados (de la tabla lg_maquina_papel_impresion y que coincidan con las tarifas actuales) $initData = $this->model->getInitData($isRotativa, $isInkjet, $tarifas, $maquina_id); // 2- Se cuentan los resultados. Si no hay coincidencias, hay que crear la tabla pivote con todos los papeles que cumplan la // condición de las tarifas y con la columna active a 0. Si hay coincidencias, se guardan los activos en un array $selected_papers = $initData->countAllResults(); $active_values = []; if($selected_papers > 0){ $active_values = $this->model->getInitData($isRotativa, $isInkjet, $tarifas, $maquina_id)->get()->getResult('array'); } // Primero se borran las filas con la maquina_id de la tabla pivote $this->model->deleteRows($maquina_id); // Se insertan en la tabla pivote los resultados de los papeles que cumplan con las tarifas con el campo active = 0 $data = $papelimpresion_model->getIdPapelesImpresion($maquina_id, $tarifas)->get()->getResult('array'); $this->model->insertRows($data); // Se actualizan los activos que había en caso de que los hubiera if(count($active_values)>0){ $this->model->updateRows($active_values); } $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $response[$csrfTokenName] = $newTokenHash; echo json_encode($response); } else { return $this->failUnauthorized('Invalid request', 403); } } public function datatable_editor() { if ($this->request->isAJAX()) { $reqData = $this->request->getPost(); if($reqData['action'] =='edit'){ $rec_data = $reqData['data']; $key = array_key_first($rec_data); $maquina_id = $rec_data[$key]['maquina_id'] ?? -1; $papel_id = $rec_data[$key]['papel_impresion_id'] ?? -1; $active = $rec_data[$key]['active'] ?? -1; $gramaje = $rec_data[$key]['gramaje'] ?? -1; $data = [ 'maquina_id' => $maquina_id, 'papel_impresion_id' => $papel_id, 'active' => $active, ]; // Se checkea que no haya otro papel con ese gramaje seleccionado y que la accion sea activar ese papel // Esta funcionalidad esta mal: habría que comprobar también que tienen el mismo papel genérico. Se opta por // quitar la condición el 22012025 /*if($this->model->getPapelActivo($maquina_id, $gramaje)->countAllResults() != 0 && intval($active)==1){ $response['error']= lang('MaquinasPapelImpresion.gramaje_duplicado');; $ret_vals = [ 'DT_RowId' => 'row_'. $papel_id, 'maquina_id' => $maquina_id, 'papel_impresion_id' => $papel_id, 'active' => '0', ]; $response['data'] = $ret_vals; } else{*/ $this->model->updateRows([$data]); //} $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); $response[$csrfTokenName] = $newTokenHash; echo json_encode($response); } else{ return $this->failUnauthorized('Invalid request', 403); } } else { return $this->failUnauthorized('Invalid request', 403); } } }