public static function insertadetallesrecepfactura($model) { //Primero debemos verificar si ha habido anulacion de vales // y luego darnos cuenta que pares de kardex (Vale original, Vale anulacion) Son para no considerarlos. //Sacando los numeros de vales originales relacionados a la compra $vales = yii::app()->db->createCommand()->select('a.numvale')->from('{{almacendocs}} a,{{alkardex}} b, {{alentregas}} c')->where("a.id=b.hidvale AND b.id=c.idkardex AND b.numdocref=:nocompra", array(":nocompra" => $model->numocompra))->queryColumn(); //Sacando los numeros de documentos referenciados en dichos vales, que tambien son vales $valesreferenciados = yii::app()->db->createCommand()->select('a.numdocref')->from('{{almacendocs}} a,{{alkardex}} b, {{alentregas}} c')->where("a.id=b.hidvale AND b.id=c.idkardex AND b.numdocref=:nocompra ", array(":nocompra" => $model->numocompra))->queryColumn(); // var_dump($model->numocompra); $arraypar = array_combine($vales, $valesreferenciados); $vales = array_unique($vales); $valesreferenciados = array_unique($valesreferenciados); /* print_r( $arraypar); echo "<br><br><br>"; print_r( $vales); echo "<br><br><br>"; print_r( $valesreferenciados); echo "<br><br><br>";*/ ///Ahora usamos la teoria de conjuntos $vales INTERESECCION $valesreferenciados ///QUIRE DECIR QEU SI HA HABIDO ANULACIONES , DEBE DE HABER UNA INTERSECCION $interseccion = array_intersect($vales, $valesreferenciados); if (COUNT($interseccion) > 0) { foreach ($interseccion as $clave => $valor) { unset($arraypar[$valor]); if (array_search($valor, $arraypar)) { unset($arraypar[array_search($valor, $arraypar)]); } } $vales = array_keys($arraypar); } ///prteparamos n array de parametros pra el querybuilder $valores = array(); $i = 0; foreach ($vales as $clave => $valor) { $valores[":ycp" . $i] = $valor . ''; $i = $i + 1; } // print_r( $valores);yii::app()->end(); $criterio = new CDBCriteria(); $criterio->addCondition("a.id=b.hidvale AND b.id=c.idkardex AND b.numdocref=:numocompra"); $criterio->addInCondition('a.numvale', array_keys($valores)); $valores[":numocompra"] = $model->numocompra; $criterio->params = $valores; $entregas = yii::app()->db->createCommand()->select('c.id')->from('{{almacendocs}} a,{{alkardex}} b, {{alentregas}} c')->where($criterio->condition, $criterio->params)->queryAll(); //buscando las enrtegas $registrocompra = Ocompra::findByNumero($model->numocompra); foreach ($entregas as $filaentrega) { /* var_dump($filaentrega->id); yii::app()->end();*/ $detalle = new Tempdetingfactura(); $detalle->setScenario('basico'); $detalle->setAttributes(array('hidfactura' => $model->id, 'hidalentrega' => $filaentrega["id"], 'idusertemp' => yii::app()->user->id, 'idstatus' => 1)); $detalle->save(); } }
public function chkfechas($attribute, $params) { ///PRIMERO QUE LA FECHA DEL INGRESO NO PUEDE SER ANTERIOR A LA FECHA DE LA OC ///LA FECHA DE LA FACTURA fechadoc NO PUEDE SER MAYOR QUE LA FECHA DEL INGRESO if (!yii::app()->periodo->verificaFechas($this->fechadoc, $this->fecha)) { $this->adderror('fechadoc', 'La fecha de la factura es mayor que la fecha de ingreso'); } ///LA FECHA DE LA FACTURA fechadoc NO PUEDE SER MAYOR QUE LA FECHA DE LA ORDEN DE COMPRA //Sacando la fecha de la OC $registrocompra = Ocompra::findByNumero($this->numocompra); if (!yii::app()->periodo->verificaFechas($registrocompra->fechanominal, $this->fechadoc)) { $this->adderror('fechadoc', 'La fecha de la factura es menor que la de la Orden de compra'); } ///LA FECHA DE LA FACTURA fechadoc DEBE DE ESTAR DENTRO DEL PERIODO ACTIVO if (!yii::app()->periodo->estadentroperiodo($this->fechadoc)) { $this->adderror('fechadoc', 'La fecha de la factura no esta dentro del periodo activo'); } ///LA FECHA DEl INGRESO fecha DEBE DE ESTAR DENTRO DEL PERIODO ACTIVO if (!yii::app()->periodo->estadentroperiodo($this->fecha)) { $this->adderror('fechadoc', 'La fecha de ingreso no esta dentro del periodo activo'); } //LA FECHA DE LA FACTURA fechadoc DEBE DE DEBE SER MAYOR QUE LA FECHA DE LA ULTIMA ENTREGA DE MERCADERIA /*$criterio=New CDBCriteria; $criterio->addcondition("hidguia=:idcompra"); $criterio->params=array(":idcompra"=>$registrocompra->idguia); $idhijos=MiFactoria::arrayColumnaSQL('{{docompra}}','id',$criterio->condition,$criterio->params); unset($criterio); $criterio=New CDBCriteria; $criterio->addInCondition("iddetcompra",$idhijos); $fila=yii::app()->db->createCommand()-> select(min('fecha'))->from('{{alentregas}}')->where($criterio->condition,$criterio->params)->queryAll(); if(count($fila)==0){ $this->adderror('numocompra','Esta Orden de compra no tiene entregas'); } else{ if(!yii::app()->periodo->verificaFechas($fila,$this->fechadoc)) $this->adderror('fechadoc','La factura tiene una fecha anterior a la primera entrega de mercaderia o conformidad'); }*/ //LA DIFERENCIA DE FECHAS ENTRE EL INGRESO DE LA FACTURA fechadoc Y LA FECHA DE LA FACTURA DEBE SER MENOR QUE < ???? if (yii::app()->periodo->diasentre($this->fecha, $this->fechadoc) > yii::app()->settings->get('documentos', 'documentos_tolerecepfacturaendias')) { $this->adderror('fechadoc', 'La diferencia de fechas entre la factura y el ingreso paso la tolerancia en dias (' . yii::app()->settings->get("documentos", "documentos_tolerecepfacturaendias") . ')'); } }