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');
            }*/
 }