Exemplo n.º 1
0
 public function actionSincronizarbeneficios()
 {
     // recibe el parámetro de id de sincronización
     //       Yii::import('application.modules.beneficios.models.sincrolrv.*');
     Yii::import('application.models.Beneficios');
     Yii::import('application.models.BeneficioTipo');
     Yii::import('application.models.BeneficiosProductos');
     Yii::import('application.models.BeneficiosPuntosVenta');
     Yii::app()->db->createCommand("SET FOREIGN_KEY_CHECKS=0")->execute();
     ini_set('memory_limit', '-1');
     $file = fopen(Yii::getPathOfAlias('application') . DIRECTORY_SEPARATOR . date("H-i-s") . ".txt", "w");
     $client = new SoapClient(Yii::app()->params->webServiceUrl['sincronizarBeneficiosSIICOP'], array("trace" => 1, 'cache_wsdl' => WSDL_CACHE_NONE, 'exceptions' => 0));
     $pendientesSincronizar = true;
     $i = 0;
     do {
         $start = round(microtime(true) * 1000);
         $arrBeneficios = array();
         //Beneficios-BeneficiosProductos
         $h1 = round(microtime(true) * 1000);
         $sql = "select max(idBeneficioSincronizado) as maximo from t_Beneficios";
         //
         $result = Yii::app()->db->createCommand($sql)->queryAll();
         $transaction = Yii::app()->db->beginTransaction();
         $idSincronizacion = 0;
         if ($result[0]['maximo'] != null) {
             $idSincronizacion = $result[0]['maximo'];
         }
         $h2 = round(microtime(true) * 1000);
         echo $sql . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
         fwrite($file, $sql . ". Time execution: " . ($h2 - $h1) . " miliseconds" . PHP_EOL);
         // llamar a web service enviandole el id de sincronización
         $h1 = round(microtime(true) * 1000);
         try {
             /* $client = new SoapClient(Yii::app()->params->webServiceUrl['sincronizarBeneficiosSIICOP'], array(
                "trace" => 1,
                'cache_wsdl' => WSDL_CACHE_NONE
                ));*/
             $result = $client->setBeneficios($idSincronizacion);
         } catch (Exception $e) {
             $h2 = round(microtime(true) * 1000);
             echo "Error to calling to webservice" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
             Yii::app()->exit();
         }
         $h2 = round(microtime(true) * 1000);
         echo "Calling to webservice" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
         fwrite($file, "Calling to webservice" . ". Time execution: " . ($h2 - $h1) . " miliseconds" . PHP_EOL);
         if ($result['Result'] == 0) {
             Yii::log("Beneficios no han sido sincronizados correctamente\nDescripción:" . $result['Response'] . date('Y-m-d H:i:s'), CLogger::LEVEL_INFO, 'application');
             Yii::app()->end();
         }
         if ($result['Result'] == 2) {
             $pendientesSincronizar = false;
         }
         if ($result['Result'] == 1) {
             $pendientesSincronizar = true;
             $arrTiposBeneficio = $result['arrTiposBeneficio'];
             $arrBeneficios = $result['arrBeneficios'];
             foreach ($arrTiposBeneficio as $beneficioTipo) {
                 $objBeneficioTipo = BeneficioTipo::model()->find(array('condition' => 'tipo=:tipo', 'params' => array(':tipo' => $beneficioTipo['Tipo'])));
                 if ($objBeneficioTipo === null) {
                     $objBeneficioTipo = new BeneficioTipo();
                     $objBeneficioTipo->tipo = $beneficioTipo['Tipo'];
                     $objBeneficioTipo->fechaCreacion = $beneficioTipo['FechaCreacion'];
                 }
                 $objBeneficioTipo->descripcion = $beneficioTipo['Descripcion'];
                 $h1 = round(microtime(true) * 1000);
                 if (!$objBeneficioTipo->save()) {
                     throw new Exception("Error al guardar mBeneficioTipo {id: " . $beneficioTipo['IdBeneficioTipo'] . ", tipo: " . $beneficioTipo['Tipo'] . " error: " . CActiveForm::validate($objBeneficioTipo) . "}");
                 }
                 $h2 = round(microtime(true) * 1000);
                 fwrite($file, "Trying save in tipo beneficios's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds" . PHP_EOL);
                 echo "Trying save in tipo beneficios's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
             }
             $datosPdv = array();
             $beneficiosProductos = array();
             foreach ($arrBeneficios as $beneficio) {
                 $objBeneficio = new Beneficios();
                 $objBeneficio->idBeneficioSincronizado = $beneficio['IdBeneficio'];
                 $objBeneficio->tipo = $beneficio['Tipo'];
                 $objBeneficio->fechaIni = $beneficio['FechaIni'];
                 $objBeneficio->fechaFin = $beneficio['FechaFin'];
                 $objBeneficio->dsctoUnid = $beneficio['DsctoUnid'];
                 $objBeneficio->dsctoFrac = $beneficio['DsctoFrac'];
                 $objBeneficio->vtaUnid = $beneficio['VtaUnid'];
                 $objBeneficio->vtaFrac = $beneficio['VtaFrac'];
                 $objBeneficio->pagoUnid = $beneficio['PagoUnid'];
                 $objBeneficio->pagoFrac = $beneficio['PagoFrac'];
                 $objBeneficio->cuentaCop = $beneficio['CuentaCop'];
                 $objBeneficio->nitCop = $beneficio['NitCop'];
                 $objBeneficio->porcCop = $beneficio['PorcCop'];
                 $objBeneficio->cuentaProv = $beneficio['CuentaProv'];
                 $objBeneficio->nitProv = $beneficio['NitProv'];
                 $objBeneficio->porcProv = $beneficio['PorcProv'];
                 $objBeneficio->promoFiel = $beneficio['PromoFiel'];
                 $objBeneficio->mensaje = $beneficio['Mensaje'];
                 $objBeneficio->swobligaCli = $beneficio['SwobligaCli'];
                 $objBeneficio->fechaCreacionBeneficio = $beneficio['FechaCreacionBeneficio'];
                 $h1 = round(microtime(true) * 1000);
                 if (!$objBeneficio->save()) {
                     throw new Exception("Error al guardar tBeneficios {id: " . $beneficio['IdBeneficio'] . ", tipo: " . $beneficio['Tipo'] . " error: " . CActiveForm::validate($objBeneficio) . "}");
                 }
                 $h2 = round(microtime(true) * 1000);
                 fwrite($file, "Trying save in beneficios's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds" . PHP_EOL);
                 echo "Trying save in beneficios's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
                 foreach ($beneficio['listBeneficiosProductos'] as $benefProd) {
                     /* $objBenefProd = new BeneficiosProductos;
                        $objBenefProd->idBeneficio = $objBeneficio->idBeneficio;
                        $objBenefProd->codigoProducto = $benefProd['Refe'];
                        $objBenefProd->mensaje = $benefProd['Mensaje'];
                        $objBenefProd->unid = $benefProd['Unid'];
                        $objBenefProd->obsequio = $benefProd['Obsequio'];
                        $objBenefProd->tipo = $benefProd['tipo'];
                        */
                     $h1 = round(microtime(true) * 1000);
                     if ($benefProd['Mensaje'] != null) {
                         $benefProd['Mensaje'] = "'" . $benefProd['Mensaje'] . "'";
                     } else {
                         $benefProd['Mensaje'] = "NULL";
                     }
                     $beneficiosProductos[] = "({$objBeneficio->idBeneficio}," . $benefProd['Refe'] . "," . $benefProd['Mensaje'] . "," . $benefProd['Unid'] . "," . $benefProd['Obsequio'] . "," . $benefProd['tipo'] . ")";
                     /*  if (!$objBenefProd->save()) {
                             throw new Exception("Error al xx guardar tBeneficiosProductos {idbenef: " . $objBeneficio->idBeneficio . ", id: " . $benefProd['IdBeneficio'] . ", refe: " . $benefProd['Refe'] . " error: " . CActiveForm::validate($objBenefProd) . "}");
                         }*/
                     $h2 = round(microtime(true) * 1000);
                     fwrite($file, "Trying save in beneficios producto's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n");
                     echo "Trying save in beneficios producto's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds\n";
                 }
                 echo "lista de productos " . count($beneficio['listBeneficiosPuntoVenta']);
                 fwrite($file, "lista de productos " . count($beneficio['listBeneficiosPuntoVenta']) . PHP_EOL);
                 $h1 = round(microtime(true) * 1000);
                 foreach ($beneficio['listBeneficiosPuntoVenta'] as $benefPdv) {
                     /*$objBenefPdv = new BeneficiosPuntosVenta;
                       $objBenefPdv->idBeneficio = $objBeneficio->idBeneficio;
                       $objBenefPdv->idComercial = $benefPdv['IDComercial'];*/
                     $datosPdv[] = "({$objBeneficio->idBeneficio},'" . $benefPdv['IDComercial'] . "')";
                     /*  if (!$objBenefPdv->save()) {
                             throw new Exception("Error al guardar tBeneficiosPuntoVenta {id: " . $benefPdv['IdBeneficio'] . ", idComercial: " . $benefPdv['IDComercial'] . " error: " . CActiveForm::validate($objBenefPdv) . "}");
                         }*/
                 }
                 $h2 = round(microtime(true) * 1000);
                 fwrite($file, "Trying save in beneficios punto de venta's table" . ". Time execution: " . ($h2 - $h1) . " miliseconds" . PHP_EOL);
             }
             if (count($datosPdv) > 0) {
                 $sql = "INSERT INTO t_BeneficiosPuntosVenta(idBeneficio,idComercial) VALUES " . implode(",", $datosPdv);
                 Yii::app()->db->createCommand($sql)->execute();
             }
             if (count($beneficiosProductos) > 0) {
                 $sql = "INSERT INTO t_BeneficiosProductos\r\n                                    (idBeneficio,\r\n                                    codigoProducto,\r\n                                    mensaje,\r\n                                    unid,\r\n                                    obsequio,\r\n                                    tipo)\r\n                                    VALUES " . implode(",", $beneficiosProductos);
                 Yii::app()->db->createCommand($sql)->execute();
             }
         }
         $transaction->commit();
         $end = round(microtime(true) * 1000);
         fwrite($file, "Time execution process {$i} " . ". " . ($end - $start) . " miliseconds" . PHP_EOL);
         echo "Time execution process {$i} " . ". " . ($end - $start) . " miliseconds\n";
         $i++;
     } while ($pendientesSincronizar);
     fclose($file);
     echo "Beneficios sincronizados correctamente";
     Yii::log("Beneficios sincronizados correctamente\n" . date('Y-m-d H:i:s'), CLogger::LEVEL_INFO, 'application');
     /*     $beneficios = Beneficios::model()->findAll(array(
                'with' => array('listBeneficiosProductos', 'listBeneficiosPuntoVenta'),
                'condition' => 't.SincronizacionLRV=:sincro',
                'params' => array(
                    ':sincro' => 0
                )
            ));
            
            
            foreach ($beneficios as $idx => $beneficio) {
                $arrBeneficios[$idx] = $beneficio->attributes;
                $arrBeneficios[$idx]['listBeneficiosProductos'] = array();
                $arrBeneficios[$idx]['listBeneficiosPuntoVenta'] = array();
                foreach ($beneficio->listBeneficiosProductos as $beneficioProducto)
                    $arrBeneficios[$idx]['listBeneficiosProductos'][] = $beneficioProducto->attributes;
                foreach ($beneficio->listBeneficiosPuntoVenta as $beneficioPdv)
                    $arrBeneficios[$idx]['listBeneficiosPuntoVenta'][] = $beneficioPdv->attributes;
            }
            //BeneficioTipo-Beneficios
            $arrTiposBeneficio = BeneficioTipo::model()->getCommandBuilder()->createFindCommand(BeneficioTipo::model()->tableSchema, new CDbCriteria)->queryAll();
            $client = new SoapClient(Yii::app()->params->webServiceUrl['sincronizarBeneficiosLRV'], array(
                "trace" => 1,
                'cache_wsdl' => WSDL_CACHE_NONE
            ));
            try {
                $result = $client->setBeneficios($arrTiposBeneficio, $arrBeneficios);
                if ($result['Result'] == 1) {
                    foreach ($beneficios as $beneficio) {
                        $beneficio->SincronizacionLRV = 1;
                        $beneficio->save();
                    }
                    Yii::log("BeneficiosCommand::sincronizarLrv: ". $result['Response'], CLogger::LEVEL_INFO, 'application');
                }else{
                    Yii::log("BeneficiosCommand::sincronizarLrv: ". $result['Response'], CLogger::LEVEL_ERROR, 'application');
                }
            } catch (SoapFault $exc) {
                Yii::log("BeneficiosCommand::sincronizarLrv::SoapFault: " . $client->__getLastResponse(), CLogger::LEVEL_ERROR, 'application');
            } catch (Exception $exc) {
                Yii::log("BeneficiosCommand::sincronizarLrv::Exception: " . $exc->getMessage(), CLogger::LEVEL_ERROR, 'application');
            }*/
 }
Exemplo n.º 2
0
 public function actionBeneficio()
 {
     /* $model = Beneficios::model()->findByPk(3);
     
     
               echo $model->objBeneficioTipo->descripcion;
               echo "<br/>";
               foreach($model->listPuntosVenta as $pdv){
               echo "$pdv->nombrePuntoDeVenta";
               echo "<br/>";
               }
     
               echo "<br/>";
               foreach($model->listBeneficiosProductos as $obj){
               echo $obj->objProducto->descripcionProducto;
               echo "<br/>";
               }
              * 
              */
     $fecha = new DateTime();
     $models = Beneficios::model()->findAll(array('with' => array('listPuntosVenta' => array('condition' => 'listPuntosVenta.codigoCiudad=:ciudad'), 'listBeneficiosProductos' => array('condition' => 'listBeneficiosProductos.codigoProducto=:producto')), 'condition' => 't.fechaIni<=:fecha AND t.fechaFin>=:fecha AND t.tipo IN (' . implode(",", Yii::app()->params->beneficios['lrv']) . ')', 'params' => array(':fecha' => $fecha->format('Y-m-d'), ':ciudad' => 76001, ':producto' => 30128)));
     echo count($models);
 }
Exemplo n.º 3
0
 function __construct(Producto $objProducto, $objCiudadSector, $codigoPerfil, $consultaPrecio = false)
 {
     $fecha = new DateTime();
     if ($objCiudadSector != null) {
         if ($objProducto->tercero == 1) {
             $listSaldosTerceros = array();
             if ($consultaPrecio) {
                 $listSaldosTerceros = ProductosSaldosTerceros::model()->findAll(array('condition' => '(codigoProducto=:producto AND codigoCiudad=:ciudad AND codigoSector=:sector)', 'params' => array(':producto' => $objProducto->codigoProducto, ':ciudad' => $objCiudadSector->codigoCiudad, ':sector' => $objCiudadSector->codigoSector)));
             } else {
                 $listSaldosTerceros = $objProducto->listSaldosTerceros;
             }
             foreach ($listSaldosTerceros as $objProductoSaldoTercero) {
                 if ($objProductoSaldoTercero->codigoCiudad == $objCiudadSector->codigoCiudad && $objProductoSaldoTercero->codigoSector == $objCiudadSector->codigoSector) {
                     $this->precioUnidad = $objProductoSaldoTercero->precioUnidad;
                     $this->precioFraccion = $objProductoSaldoTercero->precioFraccion;
                     $this->unidadFraccionamiento = $objProducto->unidadFraccionamiento;
                     $this->flete = $objProductoSaldoTercero->flete;
                     $this->tiempoEntrega = $objProductoSaldoTercero->tiempoDomicilio;
                     break;
                 }
             }
         } else {
             $listPrecios = array();
             if ($consultaPrecio) {
                 $listPrecios = ProductosPrecios::model()->findAll(array('condition' => '(codigoProducto=:producto AND codigoCiudad=:ciudad AND codigoSector=:sector)', 'params' => array(':producto' => $objProducto->codigoProducto, ':ciudad' => $objCiudadSector->codigoCiudad, ':sector' => $objCiudadSector->codigoSector)));
             } else {
                 $listPrecios = $objProducto->listPrecios;
             }
             foreach ($listPrecios as $objProductoPrecio) {
                 if ($objProductoPrecio->codigoCiudad == $objCiudadSector->codigoCiudad && $objProductoPrecio->codigoSector == $objCiudadSector->codigoSector) {
                     $this->precioUnidad = $objProductoPrecio->precioUnidad;
                     $this->precioFraccion = $objProductoPrecio->precioFraccion;
                     $this->unidadFraccionamiento = $objProducto->unidadFraccionamiento;
                     break;
                 }
             }
         }
         $objDescuentoEspecial = ProductosDescuentosEspeciales::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto AND codigoPerfil=:perfil AND fechaInicio<=:fecha AND fechaFin>=:fecha ', 'params' => array(':ciudad' => $objCiudadSector->codigoCiudad, ':sector' => $objCiudadSector->codigoSector, ':perfil' => $codigoPerfil, ':producto' => $objProducto->codigoProducto, ':fecha' => $fecha->format('Y-m-d H:i:s'))));
         if ($objDescuentoEspecial === null) {
             $objDescuentoEspecial = ProductosDescuentosEspeciales::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto AND codigoPerfil=:perfil AND fechaInicio<=:fecha AND fechaFin>=:fecha ', 'params' => array(':ciudad' => $objCiudadSector->codigoCiudad, ':sector' => Yii::app()->params->sector['*'], ':perfil' => $codigoPerfil, ':producto' => $objProducto->codigoProducto, ':fecha' => $fecha->format('Y-m-d H:i:s'))));
         }
         if ($objDescuentoEspecial === null) {
             $objDescuentoEspecial = ProductosDescuentosEspeciales::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto AND codigoPerfil=:perfil AND fechaInicio<=:fecha AND fechaFin>=:fecha ', 'params' => array(':ciudad' => Yii::app()->params->ciudad['*'], ':sector' => Yii::app()->params->sector['*'], ':perfil' => $codigoPerfil, ':producto' => $objProducto->codigoProducto, ':fecha' => $fecha->format('Y-m-d H:i:s'))));
         }
         if ($objDescuentoEspecial === null) {
             $objDescuentoEspecial = ProductosDescuentosEspeciales::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto AND codigoPerfil=:perfil AND fechaInicio<=:fecha AND fechaFin>=:fecha ', 'params' => array(':ciudad' => Yii::app()->params->ciudad['*'], ':sector' => Yii::app()->params->sector['*'], ':perfil' => Yii::app()->params->perfil['*'], ':producto' => $objProducto->codigoProducto, ':fecha' => $fecha->format('Y-m-d H:i:s'))));
         }
         if ($objDescuentoEspecial !== null) {
             $this->porcentajeDescuentoPerfil = $objDescuentoEspecial->descuentoPerfil;
         } else {
             $objDescuentoPerfil = ProductosDescuentosPerfiles::model()->find(array('condition' => 'codigoProducto=:producto AND codigoPerfil=:perfil', 'params' => array(':perfil' => $codigoPerfil, ':producto' => $objProducto->codigoProducto)));
             if ($objDescuentoPerfil !== null) {
                 $this->porcentajeDescuentoPerfil = $objDescuentoPerfil->descuentoPerfil;
             }
         }
         //consultar beneficios del producto
         //$fecha = new DateTime;
         $condition = 't.fechaIni<=:fecha AND t.fechaFin>=:fecha AND t.tipo IN (' . implode(",", Yii::app()->params->beneficios['lrv']) . ')';
         $params = array(':fecha' => $fecha->format('Y-m-d'), ':ciudad' => $objCiudadSector->codigoCiudad, ':producto' => $objProducto->codigoProducto);
         if (Yii::app()->shoppingCart->getEsClienteFiel()) {
             $condition .= " AND (swobligaCli=0 || swobligaCli=2)";
         } else {
             $condition .= " AND swobligaCli=0";
         }
         $this->listBeneficios = Beneficios::model()->findAll(array('with' => array('listPuntosVenta' => array('condition' => 'listPuntosVenta.codigoCiudad=:ciudad'), 'listBeneficiosProductos' => array('condition' => 'listBeneficiosProductos.codigoProducto=:producto')), 'condition' => $condition, 'params' => $params));
         $this->porcentajeDescuentoBeneficio = 0;
         foreach ($this->listBeneficios as $objBeneficio) {
             $this->porcentajeDescuentoBeneficio += $objBeneficio->dsctoUnid;
         }
         //restriccion de maximo de beneficio
         if ($this->porcentajeDescuentoBeneficio > Yii::app()->params->beneficios['porcentajeMaximo']) {
             $this->porcentajeDescuentoBeneficio = 0;
             $this->listBeneficios = array();
         }
         $this->precioFraccionTotal = $this->precioFraccion * $this->unidadFraccionamiento;
         $this->precioUnidad = self::redondear($this->precioUnidad, 1);
         $this->precioFraccionTotal = self::redondear($this->precioFraccionTotal, 1);
         $this->ahorroUnidad = floor($this->precioUnidad * ($this->getPorcentajeDescuento() / 100));
         //$this->ahorroFraccion=  floor($this->precioFraccionTotal * ($this->getPorcentajeDescuento() / 100));
         $this->ahorroUnidad = self::redondear($this->ahorroUnidad, 1);
         //$this->ahorroFraccion = self::redondear($this->ahorroFraccion, 1);
         $this->inicializado = true;
     }
     $this->listPuntos = Puntos::model()->findAll(array('with' => array('listPuntosProductos' => array('condition' => 'listPuntosProductos.codigoProducto=:producto AND listPuntosProductos.cantidad=:cantidad')), 'condition' => 'codigoPunto=:tipo AND activo=:activo AND fechaInicio<=:fecha AND fechaFin>=:fecha', 'params' => array(':tipo' => Yii::app()->params->puntos['producto'], ':activo' => 1, ':fecha' => $fecha->format('Y-m-d H:i:s'), ':producto' => $objProducto->codigoProducto, ':cantidad' => 1)));
 }