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); } } }
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(); } } } } }
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; } } }