Ejemplo n.º 1
0
 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();
     }
 }
Ejemplo n.º 2
0
 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") . ')');
     }
 }