public function indexAction()
 {
     $formaPago = new FormasPago();
     $this->values['formasPago'] = $formaPago->fetchAll('Descripcion', false);
     unset($formaPago);
     return array('template' => $this->entity . '/index.html.twig', 'values' => $this->values);
 }
 public function __construct($request)
 {
     parent::__construct($request);
     $formaPago = new FormasPago();
     $formasPago = $formaPago->fetchAll("Descripcion");
     $formasPago[] = array('Id' => '0', 'Value' => '*** TODAS LAS FORMAS DE PAGO ****');
     unset($formaPago);
     $this->values['formasPago'] = $formasPago;
 }
 public function ImportarAction()
 {
     $fileName = "docs/docs{$_SESSION['emp']}/tmp/formasPago.csv";
     $archivo = new Archivo($fileName);
     $archivo->setColumnsDelimiter(";");
     //$archivo->setColumnsEnclosure('"');
     if ($archivo->open("r")) {
         set_time_limit(0);
         while (($linea = $archivo->readLine()) !== FALSE) {
             $fp = new FormasPago();
             $fp->setDescripcion(utf8_encode($linea[1]));
             $fp->setObservations($linea[0]);
             $fp->setNumeroVctos(1);
             $fp->setAnotarEnCaja(0);
             $id = $fp->create();
             if (!$id) {
                 $nErrores += 1;
                 print_r($fp->getErrores());
             } else {
                 $nAciertos += 1;
             }
             unset($fp);
         }
         $archivo->close();
     } else {
         $this->values['errores'][] = "El fichero de importación " . $fileName . " no existe";
     }
     echo "Aciertos: {$nAciertos}, Errores: {$nErrores}";
     unset($archivo);
 }
 private function procesoCompra(FormaPagoForm $modelPago, $tipoEntrega)
 {
     $categoriasCompra = array();
     $productosCompra = array();
     $transaction = Yii::app()->db->beginTransaction();
     try {
         //registrar compra compra
         $objCompra = new Compras();
         $objCompra->identificacionUsuario = $modelPago->identificacionUsuario;
         $objCompra->tipoEntrega = $tipoEntrega;
         //if($tipoEntrega==Yii::app()->params->entrega['tipo']['domicilio']){
         $objCompra->fechaEntrega = $modelPago->fechaEntrega;
         $objCompra->observacion = $modelPago->comentario;
         //}
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
             $puntoVenta = $modelPago->listPuntosVenta[1][$modelPago->indicePuntoVenta];
             $objCompra->idComercial = $puntoVenta[1];
         }
         if ($modelPago->idFormaPago == Yii::app()->params->formaPago['pasarela']['idPasarela']) {
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendientePasarela'];
         } else {
             $objCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente'];
         }
         $objCompra->idTipoVenta = 1;
         $objCompra->activa = 1;
         $objCompra->invitado = $modelPago->pagoInvitado ? 1 : 0;
         $objCompra->codigoPerfil = Yii::app()->shoppingCart->getCodigoPerfil();
         $objCompra->codigoCiudad = Yii::app()->shoppingCart->getCodigoCiudad();
         $objCompra->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['domicilio']) {
             $objCompra->tiempoDomicilioCedi = Yii::app()->shoppingCart->getDeliveryStored();
             $objCompra->valorDomicilioCedi = Yii::app()->shoppingCart->getShippingStored();
             $objCompra->codigoCedi = Yii::app()->shoppingCart->objSectorCiudad->objCiudad->codigoSucursal;
         } else {
             if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
                 $objCompra->tiempoDomicilioCedi = 0;
                 $objCompra->valorDomicilioCedi = 0;
                 $objCompra->codigoCedi = 0;
             }
         }
         $objCompra->subtotalCompra = Yii::app()->shoppingCart->getCost();
         $objCompra->impuestosCompra = Yii::app()->shoppingCart->getTaxPrice();
         $objCompra->baseImpuestosCompra = Yii::app()->shoppingCart->getBaseTaxPrice();
         $objCompra->domicilio = Yii::app()->shoppingCart->getShipping();
         $objCompra->flete = Yii::app()->shoppingCart->getExtraShipping();
         $objCompra->totalCompra = Yii::app()->shoppingCart->getTotalCost();
         if (!$objCompra->save()) {
             throw new Exception("Error al guardar compra" . $objCompra->validateErrorsResponse());
         }
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
             $puntoVenta = $modelPago->listPuntosVenta[1][$modelPago->indicePuntoVenta];
             $objEstadoCompra = new ComprasEstados();
             $objEstadoCompra->idCompra = $objCompra->idCompra;
             $objEstadoCompra->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['asignado'];
             $objEstadoCompra->idOperador = 38;
             if (!$objEstadoCompra->save()) {
                 throw new Exception("Error al guardar traza de estado: " . $objEstadoCompra->validateErrorsResponse());
             }
             $objObservacion = new ComprasObservaciones();
             $objObservacion->idCompra = $objCompra->idCompra;
             $objObservacion->observacion = "Cambio de Estado: Asignado PDV. " . $puntoVenta[2];
             $objObservacion->idOperador = 38;
             $objObservacion->notificarCliente = 0;
             if (!$objObservacion->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion->validateErrorsResponse());
             }
             $objEstadoCompra2 = new ComprasEstados();
             $objEstadoCompra2->idCompra = $objCompra->idCompra;
             $objEstadoCompra2->idEstadoCompra = Yii::app()->params->callcenter['estadoCompra']['estado']['pendiente'];
             $objEstadoCompra2->idOperador = 38;
             if (!$objEstadoCompra2->save()) {
                 throw new Exception("Error al guardar traza de estado: " . $objEstadoCompra2->validateErrorsResponse());
             }
             $objObservacion2 = new ComprasObservaciones();
             $objObservacion2->idCompra = $objCompra->idCompra;
             $objObservacion2->observacion = "Cambio de Estado: Pendiente de entrega a cliente en PDV. " . $puntoVenta[2];
             $objObservacion2->idOperador = 38;
             $objObservacion2->notificarCliente = 0;
             if (!$objObservacion2->save()) {
                 throw new Exception("Error al guardar observación" . $objObservacion2->validateErrorsResponse());
             }
         }
         if ($modelPago->bono !== null && $modelPago->usoBono == 1) {
             Yii::app()->shoppingCart->setBono($modelPago->bono['valor']);
         }
         $objFormasPago = new FormasPago();
         //FormaPago::model()->findByPk($modelPago->idFormaPago);
         $objFormasPago->idCompra = $objCompra->idCompra;
         $objFormasPago->valor = Yii::app()->shoppingCart->getTotalCost();
         $objFormasPago->numeroTarjeta = $modelPago->numeroTarjeta;
         $objFormasPago->cuotasTarjeta = $modelPago->cuotasTarjeta;
         $objFormasPago->idFormaPago = $modelPago->idFormaPago;
         $objFormasPago->valorBono = Yii::app()->shoppingCart->getBono();
         /* if ($modelPago->bono !== null && $modelPago->usoBono == 1) {
                $objFormasPago->valorBono = $modelPago->bono['valor'];
            } */
         /*if($objFormasPago->valorBono>0){
                             try{
                                 $clientBono = new SoapClient(null, array(
                                     'location' => Yii::app()->params->webServiceUrl['crmLrv'],
                                     'uri' => "",
                                     'trace' => 1
                                 ));
                                 $resultBono = $clientBono->__soapCall("ActualizarBono", array('identificacion' => $objCompra->identificacionUsuario));
         
                                 if (empty($resultBono) || $resultBono[0]->ESTADO == 0) {
                                     throw new Exception("Error al actualizar bono");
                                 }
                             }catch(SoapFault $soapExc){
                                 throw new Exception("Error al actualizar bono");
                             }
                         }*/
         if (!$objFormasPago->save()) {
             throw new Exception("Error al guardar forma de pago" . $objFormasPago->validateErrorsResponse());
         }
         $objCompraDireccion = new ComprasDireccionesDespacho();
         if ($tipoEntrega == Yii::app()->params->entrega['tipo']['domicilio']) {
             if ($modelPago->pagoInvitado) {
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = $modelPago->descripcion;
                 $objCompraDireccion->nombre = $modelPago->nombre;
                 $objCompraDireccion->direccion = $modelPago->direccion;
                 $objCompraDireccion->barrio = $modelPago->barrio;
                 $objCompraDireccion->telefono = $modelPago->telefono;
                 $objCompraDireccion->celular = $modelPago->celular;
                 $objCompraDireccion->codigoCiudad = Yii::app()->shoppingCart->getCodigoCiudad();
                 $objCompraDireccion->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
             } else {
                 $objDireccion = DireccionesDespacho::model()->findByPk($modelPago->idDireccionDespacho);
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = $objDireccion->descripcion;
                 $objCompraDireccion->nombre = $objDireccion->nombre;
                 $objCompraDireccion->direccion = $objDireccion->direccion;
                 $objCompraDireccion->barrio = $objDireccion->barrio;
                 $objCompraDireccion->telefono = $objDireccion->telefono;
                 $objCompraDireccion->celular = $objDireccion->celular;
                 $objCompraDireccion->codigoCiudad = $objDireccion->codigoCiudad;
                 $objCompraDireccion->codigoSector = $objDireccion->codigoSector;
                 $objCompraDireccion->pdvAsignado = $objDireccion->pdvAsignado;
                 if ($objDireccion->codigoSector == 0 && Yii::app()->shoppingCart->getCodigoSector() != 0) {
                     $objDireccion->codigoSector = Yii::app()->shoppingCart->getCodigoSector();
                     $objDireccion->save();
                 }
             }
         } else {
             if ($tipoEntrega == Yii::app()->params->entrega['tipo']['presencial']) {
                 $objCompraDireccion = new ComprasDireccionesDespacho();
                 $objCompraDireccion->idCompra = $objCompra->idCompra;
                 $objCompraDireccion->descripcion = "NA";
                 $objCompraDireccion->nombre = "NA";
                 $objCompraDireccion->direccion = "NA";
                 $objCompraDireccion->barrio = "NA";
                 $objCompraDireccion->telefono = $modelPago->telefonoContacto;
             }
         }
         if (!$objCompraDireccion->save()) {
             throw new Exception("Error al guardar dirección de compra" . $objCompraDireccion->validateErrorsResponse());
         }
         //generar puntos //--
         $listPuntosCompra = array();
         if (!$modelPago->pagoInvitado) {
             $fecha = new DateTime();
             $parametrosPuntos = array(Yii::app()->params->puntos['categoria'] => Yii::app()->shoppingCart->getCategorias(), Yii::app()->params->puntos['marca'] => Yii::app()->shoppingCart->getMarcas(), Yii::app()->params->puntos['proveedor'] => Yii::app()->shoppingCart->getProveedores(), Yii::app()->params->puntos['producto'] => Yii::app()->shoppingCart->getProductosCantidad(), Yii::app()->params->puntos['monto'] => $objCompra->subtotalCompra, Yii::app()->params->puntos['cedula'] => array('identificacionUsuario' => Yii::app()->user->name, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['rango'] => array('fecha' => $fecha, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['cumpleanhos'] => array('fechaNacimiento' => Yii::app()->session[Yii::app()->params->usuario['sesion']]->objUsuarioExtendida->fechaNacimiento, 'valor' => $objCompra->subtotalCompra), Yii::app()->params->puntos['clientefielCompra'] => $objCompra->subtotalCompra);
             $listPuntosCompra = ComprasPuntos::generarPuntos($fecha, Yii::app()->session[Yii::app()->params->usuario['sesion']], $parametrosPuntos);
         }
         //-- generar puntos
         // guardar puntos  //--
         foreach ($listPuntosCompra as $objPuntoCompra) {
             $objPuntoCompra->idCompra = $objCompra->idCompra;
             if (!$objPuntoCompra->save()) {
                 throw new Exception("Error al guardar punto de compra {$objPuntoCompra->idPunto}. " . $objPuntoCompra->validateErrorsResponse());
             }
         }
         //-- guardar puntos //--
         //items de compra
         $positions = Yii::app()->shoppingCart->getPositions();
         foreach ($positions as $position) {
             if ($position->isProduct()) {
                 //actualizar saldo producto //--
                 $objSaldo = null;
                 if ($position->objProducto->tercero == 1) {
                     $objSaldo = ProductosSaldosTerceros::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':producto' => $position->objProducto->codigoProducto)));
                 } else {
                     $objSaldo = ProductosSaldos::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND codigoProducto=:producto', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':producto' => $position->objProducto->codigoProducto)));
                 }
                 if ($objSaldo == null) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . " no disponible");
                 }
                 if ($objSaldo->saldoUnidad < $position->getQuantityUnit()) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldoUnidad} unidades");
                 }
                 if ($objSaldo->saldoFraccion < $position->getQuantity(true)) {
                     throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldoFraccion} fracciones");
                 }
                 $objSaldo->saldoUnidad = $objSaldo->saldoUnidad - $position->getQuantityUnit();
                 $objSaldo->saldoFraccion = $objSaldo->saldoFraccion - $position->getQuantity(true);
                 $objSaldo->save();
                 //-- actualizar saldo producto
                 //actualizar saldo bodega //--
                 if ($position->getQuantityStored() > 0) {
                     $objSaldoBodega = ProductosSaldosCedi::model()->find(array('condition' => 'codigoCedi=:cedi AND codigoProducto=:producto', 'params' => array(':cedi' => Yii::app()->shoppingCart->getObjCiudad()->codigoSucursal, ':producto' => $position->objProducto->codigoProducto)));
                     if ($objSaldoBodega == null) {
                         throw new Exception("Producto " . $position->objProducto->codigoProducto . " no disponible en bodega");
                     }
                     if ($objSaldoBodega->saldoUnidad < $position->getQuantityStored()) {
                         throw new Exception("Producto " . $position->objProducto->codigoProducto . ". La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldoBodega->saldoUnidad} unidades");
                     }
                     $objSaldoBodega->saldoUnidad = $objSaldoBodega->saldoUnidad - $position->getQuantityStored();
                     $objSaldoBodega->save();
                 }
                 //-- actualizar saldo bodega
                 $objItem = new ComprasItems();
                 $objItem->idCompra = $objCompra->idCompra;
                 $objItem->codigoProducto = $position->objProducto->codigoProducto;
                 $objItem->descripcion = $position->objProducto->descripcionProducto;
                 $objItem->presentacion = $position->objProducto->presentacionProducto;
                 $objItem->precioBaseUnidad = $position->getPrice(false, false);
                 $objItem->precioBaseFraccion = $position->getPrice(true, false);
                 $objItem->descuentoUnidad = $position->getDiscountPrice();
                 $objItem->descuentoFraccion = $position->getDiscountPrice(true);
                 $objItem->precioTotalUnidad = $position->getSumPriceUnit();
                 $objItem->precioTotalFraccion = $position->getSumPriceFraction(true);
                 $objItem->terceros = $position->objProducto->tercero;
                 $objItem->unidades = $position->getQuantityUnit();
                 $objItem->fracciones = $position->getQuantity(true);
                 $objItem->unidadesCedi = $position->getQuantityStored();
                 $objItem->codigoImpuesto = $position->objProducto->codigoImpuesto;
                 $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['activo'];
                 //$objItem->idEstadoItemTercero = null;
                 $objItem->flete = $position->getShipping();
                 $objItem->disponible = 1;
                 if ($objCompra->identificacionUsuario !== null) {
                     $categoriasCompra[] = "('" . $objCompra->identificacionUsuario . "','" . $position->objProducto->idCategoriaBI . "')";
                 }
                 $productosCompra[] = "('" . $position->objProducto->codigoProducto . "')";
                 if (!$objItem->save()) {
                     throw new Exception("Error al guardar item de compra {$objItem->codigoProducto}. " . $objItem->validateErrorsResponse());
                 }
                 //beneficios
                 foreach ($position->getBeneficios() as $objBeneficio) {
                     $objBeneficioItem = new BeneficiosComprasItems();
                     $objBeneficioItem->idBeneficio = $objBeneficio->idBeneficio;
                     $objBeneficioItem->idBeneficioSincronizado = $objBeneficio->idBeneficioSincronizado;
                     $objBeneficioItem->idCompraItem = $objItem->idCompraItem;
                     $objBeneficioItem->tipo = $objBeneficio->tipo;
                     $objBeneficioItem->fechaIni = $objBeneficio->fechaIni;
                     $objBeneficioItem->fechaFin = $objBeneficio->fechaFin;
                     $objBeneficioItem->dsctoUnid = $objBeneficio->dsctoUnid;
                     $objBeneficioItem->dsctoFrac = $objBeneficio->dsctoFrac;
                     $objBeneficioItem->vtaUnid = $objBeneficio->vtaUnid;
                     $objBeneficioItem->vtaFrac = $objBeneficio->vtaFrac;
                     $objBeneficioItem->pagoUnid = $objBeneficio->pagoUnid;
                     $objBeneficioItem->pagoFrac = $objBeneficio->pagoFrac;
                     $objBeneficioItem->cuentaCop = $objBeneficio->cuentaCop;
                     $objBeneficioItem->nitCop = $objBeneficio->nitCop;
                     $objBeneficioItem->porcCop = $objBeneficio->porcCop;
                     $objBeneficioItem->cuentaProv = $objBeneficio->cuentaProv;
                     $objBeneficioItem->nitProv = $objBeneficio->nitProv;
                     $objBeneficioItem->porcProv = $objBeneficio->porcProv;
                     $objBeneficioItem->promoFiel = $objBeneficio->promoFiel;
                     $objBeneficioItem->mensaje = $objBeneficio->mensaje;
                     $objBeneficioItem->swobligaCli = $objBeneficio->swobligaCli;
                     $objBeneficioItem->fechaCreacionBeneficio = $objBeneficio->fechaCreacionBeneficio;
                     if (!$objBeneficioItem->save()) {
                         throw new Exception("Error al guardar beneficio de compra {$objBeneficioItem->idCompraItem}. " . $objBeneficioItem->validateErrorsResponse());
                     }
                 }
             } else {
                 if ($position->isCombo()) {
                     $objSaldo = ComboSectorCiudad::model()->find(array('condition' => 'codigoCiudad=:ciudad AND codigoSector=:sector AND idCombo=:combo', 'params' => array(':ciudad' => Yii::app()->shoppingCart->getCodigoCiudad(), ':sector' => Yii::app()->shoppingCart->getCodigoSector(), ':combo' => $position->objCombo->idCombo)));
                     if ($objSaldo == null) {
                         throw new Exception("Combo " . $position->objCombo->getCodigo() . " no disponible");
                     }
                     if ($objSaldo->saldo < $position->getQuantity()) {
                         throw new Exception("Combo " . $position->objCombo->getCodigo() . "La cantidad solicitada no está disponible en este momento. Saldos disponibles: {$objSaldo->saldo} unidades");
                     }
                     $objSaldo->saldo = $objSaldo->saldo - $position->getQuantity();
                     $objSaldo->save();
                     foreach ($position->objCombo->listProductosCombo as $productoCombo) {
                         $objItem = new ComprasItems();
                         $objItem->idCompra = $objCompra->idCompra;
                         $objItem->idCombo = $position->objCombo->idCombo;
                         $objItem->codigoProducto = $productoCombo->objProducto->codigoProducto;
                         $objItem->descripcion = $productoCombo->objProducto->descripcionProducto;
                         $objItem->descripcionCombo = $position->objCombo->descripcionCombo;
                         $objItem->presentacion = $productoCombo->objProducto->presentacionProducto;
                         $objItem->precioBaseUnidad = $productoCombo->precio;
                         $objItem->precioBaseFraccion = 0;
                         $objItem->descuentoUnidad = 0;
                         $objItem->descuentoFraccion = 0;
                         $objItem->precioTotalUnidad = $productoCombo->precio * $position->getQuantity();
                         $objItem->precioTotalFraccion = 0;
                         $objItem->terceros = $productoCombo->objProducto->tercero;
                         $objItem->unidades = $position->getQuantity();
                         $objItem->fracciones = 0;
                         $objItem->unidadesCedi = 0;
                         $objItem->codigoImpuesto = $productoCombo->objProducto->codigoImpuesto;
                         $objItem->idEstadoItem = Yii::app()->params->callcenter['estadoItem']['estado']['activo'];
                         //$objItem->idEstadoItemTercero = null;
                         $objItem->flete = $position->getShipping();
                         $objItem->disponible = 1;
                         if (!$objItem->save()) {
                             throw new Exception("Error al guardar item de compra {$objItem->codigoProducto}. " . $objItem->validateErrorsResponse());
                         }
                         if ($objCompra->identificacionUsuario !== null) {
                             $categoriasCompra[] = "('" . $objCompra->identificacionUsuario . "','" . $productoCombo->objProducto->idCategoriaBI . "')";
                         }
                         $productosCompra[] = "('" . $productoCombo->objProducto->codigoProducto . "')";
                     }
                 }
             }
         }
         $objUsuario = Yii::app()->session[Yii::app()->params->usuario['sesion']];
         $objPasarelaEnvio = null;
         $asuntoCorreo = Yii::app()->params->asunto['pedidoRealizado'];
         if ($modelPago->idFormaPago == Yii::app()->params->formaPago['pasarela']['idPasarela']) {
             $asuntoCorreo = Yii::app()->params->asunto['pedidoRealizadoPasarela'];
             $objPasarelaEnvio = new PasarelaEnvios();
             $objPasarelaEnvio->idCompra = $objCompra->idCompra;
             $objPasarelaEnvio->valor = $objCompra->totalCompra;
             $objPasarelaEnvio->iva = $objCompra->impuestosCompra;
             $objPasarelaEnvio->baseIva = $objCompra->baseImpuestosCompra;
             $objPasarelaEnvio->moneda = "COP";
             $objPasarelaEnvio->nombre = $objUsuario->getNombreCompleto();
             $objPasarelaEnvio->identificacionUsuario = $objCompra->identificacionUsuario;
             $objPasarelaEnvio->tipoDocumento = 1;
             $objPasarelaEnvio->correoElectronico = $objUsuario->correoElectronico;
             if (!$objPasarelaEnvio->save()) {
                 throw new Exception("Error al guardar registro de pasarela. " . $objPasarelaEnvio->validateErrorsResponse());
             }
         }
         if (count($categoriasCompra) > 0) {
             $sql = "INSERT INTO t_ComprasUsuariosCategorias(identificacionUsuario, idCategoriaBI) VALUES " . implode(",", $categoriasCompra) . " ON DUPLICATE KEY UPDATE cantidad=cantidad+1";
             Yii::app()->db->createCommand($sql)->execute();
         }
         if (count($productosCompra) > 0) {
             $sql = "INSERT INTO t_ProductosVendidos(codigoProducto) VALUES " . implode(",", $productosCompra) . " ON DUPLICATE KEY UPDATE cantidad=cantidad+1";
             Yii::app()->db->createCommand($sql)->execute();
         }
         $objFormaPago = FormaPago::model()->findByPk($modelPago->idFormaPago);
         $contenidoCorreo = $this->renderPartial('compraCorreo', array('objCompra' => $objCompra, 'modelPago' => $modelPago, 'objCompraDireccion' => $objCompraDireccion, 'objFormaPago' => $objFormaPago, 'objFormasPago' => $objFormasPago, 'objUsuario' => $objUsuario), true, true);
         $htmlCorreo = $this->renderPartial('/usuario/_correo', array('contenido' => $contenidoCorreo), true, true);
         sendHtmlEmail($objUsuario->correoElectronico, $asuntoCorreo, $htmlCorreo);
         $transaction->commit();
         return array('result' => 1, 'response' => array('objCompra' => $objCompra, 'modelPago' => $modelPago, 'objCompraDireccion' => $objCompraDireccion, 'objFormaPago' => $objFormaPago, 'objFormasPago' => $objFormasPago, 'objPasarelaEnvio' => $objPasarelaEnvio));
     } catch (Exception $exc) {
         Yii::log($exc->getMessage() . "\n" . $exc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         try {
             $transaction->rollBack();
         } catch (Exception $txexc) {
             Yii::log($txexc->getMessage() . "\n" . $txexc->getTraceAsString(), CLogger::LEVEL_ERROR, 'application');
         }
         return array('result' => 0, 'response' => $exc->getMessage());
     }
 }
 public function FormasPago()
 {
     $nItems = 0;
     $nErrores = 0;
     $dbLink = mysql_connect("localhost", "root", "albatronic");
     $query = "TRUNCATE {$this->dbDestino}.ErpFormasPago";
     mysql_query($query);
     $query = "SELECT * FROM {$this->dbOrigen}.formas_pago";
     $result = mysql_query($query, $dbLink);
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
         $row = $this->utf($row);
         $c = new FormasPago();
         $c->setIDFP($row['IDFP']);
         $c->setDescripcion($row['Descripcion']);
         $c->setNumeroVctos($row['NumeroVctos']);
         $c->setDiaPrimerVcto($row['DiaPrimerVcto']);
         $c->setDiasIntervalo($row['DiasIntervalo']);
         $c->setPrimaryKeyMD5(md5($row['IDFP']));
         if ($c->create() == NULL) {
             $errores[] = $c->getErrores();
             $nErrores++;
         } else {
             $nItems++;
         }
     }
     //mysql_close($dbLink);
     echo "Formas de pago {$nItems}<br/>";
     if (count($errores)) {
         echo "<pre>";
         print_r($errores);
         echo "</pre>";
     }
 }
/**
 * Construye un tag <select> con todas las formas de pago y propone la habitual de la ficha del proveedor dado
 * @param integer $idProveedor ID del proveedor
 * @param string $nameSelect El Name del select
 * @param string $idSelect El Id del select
 * @return string Codigo html con el tag select
 */
function formasPagoProveedor($idProveedor, $nameSelect = '', $idSelect = '')
{
    $fPago = new FormasPago();
    $rows = $fPago->fetchAll('Descripcion');
    unset($fPago);
    $proveedor = new Proveedores($idProveedor);
    $fPagoProveedor = $proveedor->getIDFP()->getIDFP();
    unset($proveedor);
    if ($nameSelect == '') {
        $nameSelect = $_GET['nameselect'];
    }
    if ($idSelect == '') {
        $idSelect = $_GET['idselect'];
    }
    $ch = "<div class='Etiqueta'>Forma de Pago</div>";
    $ch .= "<select name='" . $_GET['nameselect'] . "' id='" . $_GET['idselect'] . "' class='Select'>";
    foreach ($rows as $row) {
        $ch .= "<option value='" . $row['Id'] . "'";
        if ($fPagoProveedor == $row['Id']) {
            $ch .= " SELECTED ";
        }
        $ch .= ">" . $row['Value'] . "</option>";
    }
    $ch .= "</select>";
    return $ch;
}
 /**
  * Recalcula y guarda los importes de la factura en base a sus lineas
  * Se utiliza durante el proceso de facturación
  */
 public function recalcula()
 {
     //SI TIENE DESCUENTO, CALCULO EL PORCENTAJE QUE SUPONE RESPECTO AL IMPORTE BRUTO
     //PARA REPERCUTUIRLO PORCENTUALMENTE A CADA BASE
     $pordcto = 0;
     if ($this->getDescuento() != 0) {
         $pordcto = round(100 * ($this->getDescuento() / $this->getImporte()), 2);
     }
     //Calcular los totales, desglosados por tipo de iva.
     $lineas = new FrecibidasLineas();
     $rows = $lineas->cargaCondicion("sum(importe) as Bruto", "IDFactura='{$this->IDFactura}'");
     $bruto = $rows[0]['Bruto'];
     $rows = $lineas->cargaCondicion("Iva, sum(Importe) as Importe", "IDFactura='{$this->IDFactura}' group by Iva order by Iva");
     $totbases = 0;
     $totiva = 0;
     $bases = array();
     foreach ($rows as $key => $row) {
         $importe = $row['Importe'] * (1 - $pordcto / 100);
         $cuotaiva = round($importe * $row['Iva'] / 100, 2);
         $cuotarecargo = round($importe * $row['Recargo'] / 100, 2);
         $totbases += $importe;
         $totiva += $cuotaiva;
         $totrec += $cuotarecargo;
         $bases[$key] = array('b' => $importe, 'i' => $row['Iva'], 'ci' => $cuotaiva, 'r' => $row['Recargo'], 'cr' => $cuotarecargo);
     }
     $subtotal = $totbases + $totiva + $totrec;
     // Calcular el recargo financiero según la forma de pago
     $formaPago = new FormasPago($this->IDFP);
     $recFinanciero = $formaPago->getRecargoFinanciero();
     $cuotaRecFinanciero = $subtotal * $recFinanciero / 100;
     unset($formaPago);
     $total = $subtotal + $cuotaRecFinanciero;
     $this->setImporte($bruto);
     $this->setBaseImponible1($bases[0]['b']);
     $this->setIva1($bases[0]['i']);
     $this->setCuotaIva1($bases[0]['ci']);
     $this->setRecargo1($bases[0]['r']);
     $this->setCuotaRecargo1($bases[0]['cr']);
     $this->setBaseImponible2($bases[1]['b']);
     $this->setIva2($bases[1]['i']);
     $this->setCuotaIva2($bases[1]['ci']);
     $this->setRecargo2($bases[1]['r']);
     $this->setCuotaRecargo2($bases[1]['cr']);
     $this->setBaseImponible3($bases[2]['b']);
     $this->setIva3($bases[2]['i']);
     $this->setCuotaIva3($bases[2]['ci']);
     $this->setRecargo3($bases[2]['r']);
     $this->setCuotaRecargo3($bases[2]['cr']);
     $this->setTotalBases($totbases);
     $this->setTotalIva($totiva);
     $this->setTotalRecargo($totrec);
     $this->setRecargoFinanciero($recFinanciero);
     $this->setCuotaRecargoFinanciero($cuotaRecFinanciero);
     $this->setTotal($total);
     $this->save();
 }
 /**
  * Cambia de estado al conjunto de recibos recibidos
  *
  * Actualiza su estado, la fecha de vencimiento y la cuenta contable
  * Además genera apunte de caja si procede
  *
  * @return array
  */
 public function CobrarAction()
 {
     if ($this->values['permisos']['permisosModulo']['UP']) {
         $formaPago = new FormasPago($this->request['idFP']);
         $anotarEnCaja = $formaPago->getAnotarEnCaja()->getIDTipo() == '1';
         $estadoRecibo = $formaPago->getEstadoRecibo()->getIDTipo();
         $cContable = $formaPago->getCContable();
         $caja = new CajaArqueos();
         foreach ($this->request['RecibosClientes'] as $recibo) {
             $objeto = new RecibosClientes($recibo['IDRecibo']);
             $objeto->setVencimiento($this->request['fechaCobro']);
             $objeto->setIDEstado($estadoRecibo);
             $objeto->setCContable($cContable);
             if ($objeto->save() and $anotarEnCaja) {
                 $caja->anotaEnCaja($objeto, $this->request['idFP']);
             }
             if (count($objeto->getErrores) > 0) {
                 print_r($objeto->getErrores());
             }
         }
         unset($objeto);
         unset($formaPago);
         unset($caja);
         return $this->listAction();
     } else {
         return array('template' => '_global/forbiden.html.twig');
     }
 }
 /**
  * Recalcula los importes de la factura en base a sus lineas
  * Se utiliza durante el proceso de facturacion agrupada
  */
 public function recalcula()
 {
     //Si el cliente no está sujeto a iva
     //pongo el iva a cero en las líneas para evitar que por cambio
     //de cliente se aplique indebidamente
     $cliente = new Clientes($this->IDCliente);
     if ($cliente->getIva()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Iva" => 0, "Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     } elseif ($cliente->getRecargoEqu()->getIDTipo() == '0') {
         $lineas = new FemitidasLineas();
         $lineas->queryUpdate(array("Recargo" => 0), "`IDFactura`= '{$this->IDFactura}'");
         unset($lineas);
     }
     unset($cliente);
     //SI TIENE DESCUENTO, CALCULO EL PORCENTAJE QUE SUPONE RESPECTO AL IMPORTE BRUTO
     //PARA REPERCUTUIRLO PORCENTUALMENTE A CADA BASE
     $pordcto = 0;
     if ($this->getDescuento() != 0) {
         $pordcto = round(100 * ($this->getDescuento() / $this->getImporte()), 2);
     }
     //Calcular los totales, desglosados por tipo de iva.
     $this->conecta();
     if (is_resource($this->_dbLink)) {
         $lineas = new FemitidasLineas();
         $tableLineas = "{$lineas->getDataBaseName()}.{$lineas->getTableName()}";
         $articulos = new Articulos();
         $tableArticulos = "{$articulos->getDataBaseName()}.{$articulos->getTableName()}";
         unset($lineas);
         unset($articulos);
         $query = "select sum(Importe) as Bruto,sum(ImporteCosto) as Costo from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "')";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $bruto = $rows[0]['Bruto'];
         $query = "select Iva,Recargo, sum(Importe) as Importe from {$tableLineas} where (IDFactura='" . $this->getIDFactura() . "') group by Iva,Recargo order by Iva";
         $this->_em->query($query);
         $rows = $this->_em->fetchResult();
         $totbases = 0;
         $totiva = 0;
         $totrec = 0;
         $bases = array();
         foreach ($rows as $key => $row) {
             $importe = $row['Importe'] * (1 - $pordcto / 100);
             $cuotaiva = round($importe * $row['Iva'] / 100, 2);
             $cuotarecargo = round($importe * $row['Recargo'] / 100, 2);
             $totbases += $importe;
             $totiva += $cuotaiva;
             $totrec += $cuotarecargo;
             $bases[$key] = array('b' => $importe, 'i' => $row['Iva'], 'ci' => $cuotaiva, 'r' => $row['Recargo'], 'cr' => $cuotarecargo);
         }
         $subtotal = $totbases + $totiva + $totrec;
         // Calcular el recargo financiero según la forma de pago
         $formaPago = new FormasPago($this->IDFP);
         $recFinanciero = $formaPago->getRecargoFinanciero();
         $cuotaRecFinanciero = $subtotal * $recFinanciero / 100;
         unset($formaPago);
         $total = $subtotal + $cuotaRecFinanciero;
         //Calcular el peso, volumen y n. de bultos de los productos inventariables
         switch ($_SESSION['ver']) {
             case '1':
                 //Cristal
                 $columna = "MtsAl";
             case '0':
                 //Estandar
             //Estandar
             default:
                 $columna = "Unidades";
         }
         $em = new EntityManager($this->getConectionName());
         $query = "select sum(a.Peso*l.{$columna}) as Peso,\n                        sum(a.Volumen*l.{$columna}) as Volumen,\n                        sum(Unidades) as Bultos \n                      from {$tableArticulos} as a,{$tableLineas} as l\n                      where (l.IDArticulo=a.IDArticulo)\n                        and (a.Inventario='1')\n                        and (l.IDFactura='{$this->IDFactura}')";
         $em->query($query);
         $rows = $em->fetchResult();
         $em->desConecta();
         $this->setImporte($bruto);
         $this->setBaseImponible1($bases[0]['b']);
         $this->setIva1($bases[0]['i']);
         $this->setCuotaIva1($bases[0]['ci']);
         $this->setRecargo1($bases[0]['r']);
         $this->setCuotaRecargo1($bases[0]['cr']);
         $this->setBaseImponible2($bases[1]['b']);
         $this->setIva2($bases[1]['i']);
         $this->setCuotaIva2($bases[1]['ci']);
         $this->setRecargo2($bases[1]['r']);
         $this->setCuotaRecargo2($bases[1]['cr']);
         $this->setBaseImponible3($bases[2]['b']);
         $this->setIva3($bases[2]['i']);
         $this->setCuotaIva3($bases[2]['ci']);
         $this->setRecargo3($bases[2]['r']);
         $this->setCuotaRecargo3($bases[2]['cr']);
         $this->setTotalBases($totbases);
         $this->setTotalIva($totiva);
         $this->setTotalRecargo($totrec);
         $this->setRecargoFinanciero($recFinanciero);
         $this->setCuotaRecargoFinanciero($cuotaRecFinanciero);
         $this->setTotal($total);
         $this->setPeso($rows[0]['Peso']);
         $this->setVolumen($rows[0]['Volumen']);
         $this->setBultos($rows[0]['Bultos']);
         $this->save();
     }
 }
 private function buscaCreaFromaPago($formaPago)
 {
     $formaPago = trim($formaPago);
     $obj = new FormasPago();
     $row = $obj->querySelect("Id", "Descripcion='{$formaPago}'");
     $id = $row[0]['Id'];
     if ($id == '') {
         //Crear
         $obj->setDescripcion($formaPago);
         $id = $obj->create();
     }
     return $id;
 }
 /**
  * Devuelve un array con los totales de movimientos por tipo de forma de cobro
  *
  * No se incluyen las formas de pago que su total sea cero.
  *
  * El array es
  * array{
  *   0 => array(IDFP=> , Descripcion=> , Importe=>)
  *   . . .
  *   n => array(IDFP=> , Descripcion=> , Importe=>)
  * }
  * @return array Totalizacion de movimientos por tipo de forma de cobro
  */
 public function getResumen()
 {
     $resumen = array();
     $formasPago = new FormasPago();
     $tablaFp = $formasPago->getDataBaseName() . "." . $formasPago->getTableName();
     unset($formasPago);
     $lineas = new CajaLineas();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     unset($lineas);
     $this->conecta();
     if (is_resource($this->_dbLink)) {
         $query = "SELECT t1.IDFP as IDFP, t2.Descripcion, sum(t1.Importe) as Importe\n                FROM\n                    {$tablaLineas} as t1,\n                    {$tablaFp} as t2\n                WHERE\n                    (t1.IDArqueo='{$this->IDArqueo}') AND\n                    (t1.IDFP=t2.IDFP)\n                GROUP BY t1.IDFP\n                HAVING (sum(t1.Importe) <> 0)";
         $this->_em->query($query);
         $resumen = $this->_em->fetchResult();
     }
     return $resumen;
 }