Esempio n. 1
0
 public function verificaconsistencia($attribute, $params)
 {
     //Verificar si esta iddesolpe, ya se pido anteriormente en el mismo documento
     if ($this->isNewRecord and count(self::model()->find('iddesolpe=:viddesolpe ', array(':viddesolpe' => $this->iddesolpe))) > 0) {
         $this->adderror('cant', 'Esta solicitud ya esta registrada en este documento, verifique ');
     }
     ///verificar la consistencia de la cantidad
     $registrosolpe = Desolpe::model()->findByPk($this->iddesolpe);
     if (!is_null($registrosolpe)) {
         $cantidadefectivaNew = $this->cant * Alconversiones::convierte($this->codart, $this->um, $registrosolpe->um);
         $cantidadefectivaOLD = $this->oldVal('cant') * Alconversiones::convierte($this->codart, $this->um, $registrosolpe->um);
         $cantidadefectiva = $cantidadefectivaNew - $cantidadefectivaOLD;
         $hayerror = true;
         if ($this->id > 0) {
             //Si es un registro que ya ha sido confirmado
             $hayerror = $registrosolpe->cuantofaltacomprar() < $cantidadefectiva ? true : false;
         } else {
             //Si es nuevo , solo verifica que si se agrega la cantidad excede
             $hayerror = $registrosolpe->cuantofaltacomprar() < $cantidadefectivaNew ? true : false;
         }
         if ($hayerror) {
             //obteniendo las referencias de los pedidos de compra que lo han tomado anteriormente
             $registros = Desolpecompra::model()->findAll("iddesolpe=:viddesolpe", array(":viddesolpe" => $this->iddesolpe));
             $mensaje = " ";
             foreach ($registros as $fila) {
                 $mensaje .= " Pedido de compra : " . $fila->docompra->ocompra->numcot . " Item : " . $fila->docompra->item . " <br>";
             }
             $this->adderror('cant', 'cant efectiva :' . $cantidadefectiva . ' ,  cuanto falta :  ' . $registrosolpe->cuantofaltacomprar() . ' ,     Usted esta comprando mas de lo que han solicitado, este item de solicitud ya se trato con  ' . $mensaje);
         }
     }
 }
Esempio n. 2
0
 public function colocapuentesolpe()
 {
     if ($this->iddesolpe > 0) {
         //Siempre y cuando sea una compra conectada  a la solpe
         //y ademas se haya modificado  la cantidad
         //$umoriginal=Desolpe::model()->findByPk($this->iddesolpe)->um;
         ///que pasa si lo estan compradno en um diferente, prevalece la UM de la SOLPE
         $umoriginal = Desolpe::model()->findByPk($this->iddesolpe)->um;
         if ($umoriginal != $this->um) {
             $cantidad = Alconversiones::convierte($this->codart, $this->um, $umoriginal);
         } else {
             $cantidad = $this->cant;
         }
         $criterio = new CDbcriteria();
         $criterio->addcondition("iddocompra=:vidocompra");
         $criterio->params = array(":vidocompra" => $this->id);
         $modelino = Desolpecompra::model()->find($criterio);
         if (is_null($modelino)) {
             if (!in_array($this->estadodetalle, array(ESTADO_DESOLPE_ANULADO))) {
                 $modelino = new Desolpecompra();
                 $modelino->setScenario('insert');
                 $modelino->setAttributes(array('iduser' => yii::app()->user->id, 'codestado' => ESTADO_DESOLPECOMPRA_NUEVO, 'iddocompra' => $this->id, 'iddesolpe' => $this->iddesolpe, 'cant' => $cantidad, 'fecha' => date("Y-m-d H:i:s")), true);
                 $modelino->save();
             }
         } else {
             if (in_array($this->estadodetalle, array(ESTADO_DESOLPE_ANULADO))) {
                 $modelino->delete();
             } else {
                 if ($this->oldVal('cant') != $this->cant or $this->oldVal('um') != $this->um) {
                     $modelino->setScenario('update');
                     $modelino->setAttributes(array('iduser' => yii::app()->user->id, 'cant' => $cantidad, 'fecha' => date("Y-m-d H:i:s")), true);
                     $modelino->save();
                 }
             }
         }
     }
 }
Esempio n. 3
0
 public function preparaantesdeguardaritemcompra($modelodetalle)
 {
     $cadenita = "";
     if ($modelodetalle->docompra_ocompra->codestado = '10' or $modelodetalle->docompra_ocompra->codestado = '20') {
         if ($modelodetalle->cambio()) {
             if ($this->hubocambiossensibles($modelodetalle, array('codart', 'punit', 'cant', 'estadodetalle'))) {
                 if ($modelodetalle->cantidadentregada == 0) {
                     if (!is_null($modelodetalle->iddesolpe)) {
                         ///NO ES UN ITEM LIBRE
                         ///vERIFICAR LA CONSIUSTENCIA DEL VALOR DEL PARAMETRO ENTREGADO
                         $registrodetallesolpe = Desolpe::model()->findByPk($modelodetalle->iddesolpe);
                         if (!is_null($registrodetallesolpe)) {
                             if ($registrodetallesolpe->desolpe_solpe->escompra != '1' or is_null($registrodetallesolpe->idreserva)) {
                                 ///Actualizar los datos aguas arriba (SOLPES Y RESERVAS)
                                 $registrodetallesolpe->SetScenario('cambiaestado');
                                 $registroreserva = Alreserva::model()->findByPk($registrodetallesolpe->idreserva);
                                 if (!is_null($registroreserva)) {
                                     $registroreserva->SetScenario('cambiaestado');
                                     //Ahora vamos por la solpe que genero la reserva
                                     $registrodetallesolpeoriginal = Desolpe::model()->findByPk($registroreserva->hidesolpe);
                                     if (!is_null($registrodetallesolpeoriginal)) {
                                         $registrodetallesolpeoriginal->SetScenario('cambiaestado');
                                         ///Verificando las compras en DESOLPECOMPRA
                                         $cantidad_comprada = $registrodetallesolpe->cantcompras;
                                         if ($cantidad_comprada > 0) {
                                             $setratadeanulacion = false;
                                             if ($modelodetalle->oldattributes['estadodetalle'] != '40' and $modelodetalle->estadodetalle == '40') {
                                                 ///Si se trata de una anulacion hay que anular el registro de DESOLPECOMPRA
                                                 $nuevocriterio = new CDbcriteria();
                                                 $nuevocriterio->addCondition("iddesolpe=:xiddesolpe AND iddocompra=:xiddocompra ");
                                                 $nuevocriterio->params = array(':xiddesolpe' => $modelodetalle->iddesolpe, ':xiddocompra' => $modelodetalle->id);
                                                 $modelodesolpecompra = Desolpecompra::model()->find($nuevocriterio);
                                                 $modelodesolpecompra->codestado = '30';
                                                 //ANULAR  ......!!!!
                                                 if (!$modelodesolpecompra->save()) {
                                                     $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : No se pudo anular el registro de Detalles-solicitudes/Detalle-compras  <br>";
                                                 }
                                                 $setratadeanulacion = true;
                                             }
                                             if ($cantidad_comprada + $modelodetalle->cant == $registrodetallesolpe->cant) {
                                                 //Es una atencion unica el caso mas simple, uno a uno
                                                 ///Verificar si se trata de una anulacion
                                                 if ($setratadeanulacion) {
                                                     ///El proceso retrocede, hayq ue anular tambien el registro de la tab la puente DESOLPECOMPRA
                                                     /// y revertir los estados
                                                     $registrodetallesolpe->est = '30';
                                                     //APROBADO
                                                     $registroreserva->estadoreserva = '20';
                                                     //EN PROICESO DE COMPRA X Q LA SOLPE AUN PERMANECE COMO APROBADA
                                                     $registrodetallesolpeoriginal->est = '70';
                                                     ///EN PROCESO DE COMPRA X Q LA RESERVA Y LA SOLPE AUN ESTAN VIGENTES
                                                 } else {
                                                     ///Si no se trata de una anulacion el proceso "evoluciona"
                                                     $registrodetallesolpe->est = '40';
                                                     //ATENDIDO
                                                     $registroreserva->estadoreserva = '50';
                                                     //COMPRADO TOTALMENTE
                                                     $registrodetallesolpeoriginal->est = '90';
                                                     ///Comprado totalmente
                                                 }
                                             } else {
                                                 //Significa que conn esta compra aun falta o se han excedido..veamos
                                                 if ($cantidad_comprada + $modelodetalle->cant < $registrodetallesolpe->cant) {
                                                     // En este caso se esta comprando pero aun falta completar, un abastecimiento parcial
                                                     $registrodetallesolpe->est = '70';
                                                     //EN COMPRA
                                                     $registroreserva->estadoreserva = '60';
                                                     //EN COMPRA
                                                 } else {
                                                     ///Error se pasaron de la cantidad solicitada
                                                     ///Error
                                                     $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : Se esta comprando : (" . ($cantidad_comprada + $modelodetalle->cant) . ")   mas de lo que se solicito :(" . $registrodetallesolpe->cant . ")  en la solicitud " . $registrodetallesolpe->desolpe_solpe->nunero . "-" . $registrodetallesolpe->item . "    <br>";
                                                 }
                                             }
                                         } else {
                                             ///qUIER DECIR QUE ES LA PRIMERA VEZ QUE SE ATENDERIA ESTE ITEM
                                         }
                                         $registrodetallesolpeoriginal->save();
                                     } else {
                                         //Error no se pudo ubicar el detalle de la Solpe Padre
                                         //eRRROR
                                         $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : No se pudo encontrar la solicitud original (Imputada) asociada (" . $registroreserva->hidesolpe . ")  <br>";
                                     }
                                     $registroreserva->save();
                                 } else {
                                     //Error no se ecnontro la reserva que genero la solpe de aprovisionamiento
                                     $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : No se pudo encontrar la reserva asociada <br>";
                                 }
                                 $registrodetallesolpe->save();
                             } else {
                                 ///Error , La solpe no es de aprovisionamiento o tiene el campo idererva vacio  lo qaue quiere decir que no es una solpe de aprovisionamiento
                                 ///Error
                                 $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : La solicitud asociada " . $registrodetallesolpe->desolpe->solpe->numero . "-" . $registrodetallesolpe->item . "  no es de àprovisionamiento <br>";
                             }
                         } else {
                             ///Error , este detakke de solped no existe
                             $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . "  : No se pudo encontrar la solicitud asociada -> (" . $modelodetalle->iddesolpe . ")  <br>";
                         }
                         /*}else{ // ($modelodetalle->cantsolpes) =0 ES LA PRIMERA ATENCION , OSEA NO HAY REGISTROS EN DESOLPECOMPRA
                         
                                                                                                                                  }*/
                     } else {
                         //ES UN ITEM LIBRE
                         return $cadena;
                     }
                 } else {
                     //HAY enetregas
                     $cadena .= " El item " . $modelodetalle->item . " - " . $modelodetalle->descri . " :  Ya tiene entregas y no es posible modificar estos datos sensibles <br>";
                 }
             } else {
                 //No ha habido cambios sensibles
                 ///Dara fin al procedimiento
                 return $cadena;
             }
         } else {
             //Terminar el procediiento
             ///Dara fin al procedimiento
             return $cadena;
         }
     }
 }