コード例 #1
0
 public function actionCreate()
 {
     $model = new Ventas();
     // Uncomment the following line if AJAX validation is needed
     // $this->performAjaxValidation($model);
     if (isset($_POST['Ventas'])) {
         //Datos de Paciente
         $elPaciente = Paciente::model()->findByPk($_POST['elpaciente_id']);
         if ($_POST['Ventas']['credito_fecha'] == "") {
             $fechaCredito = "0000-00-00";
         } else {
             $fechaCredito = Yii::app()->dateformatter->format("yyyy-MM-dd", $_POST['Ventas']['credito_fecha']);
         }
         if ($_POST['Ventas']['credito_fecha2'] == "") {
             $fechaCredito2 = "0000-00-00";
         } else {
             $fechaCredito2 = Yii::app()->dateformatter->format("yyyy-MM-dd", $_POST['Ventas']['credito_fecha2']);
         }
         $model->attributes = $_POST['Ventas'];
         $model->forma_pago = $_POST['Ventas']['forma_pago'];
         $model->descripcion = $_POST['Ventas']['descripcion'];
         $model->paciente_id = $_POST['elpaciente_id'];
         $model->n_identificacion = $elPaciente->n_identificacion;
         $model->credito_fecha = $fechaCredito;
         $model->fecha = date("Y-m-d");
         $model->fecha_hora = date("Y-m-d H:i:s");
         $model->estado = "Activo";
         $model->personal = Yii::app()->user->usuarioId;
         $model->vendedor_id = $_POST['Ventas']['vendedor_id'];
         //Mas de una forma de pago
         $model->forma_pago2 = $_POST['Ventas']['forma_pago2'];
         $model->credito_fecha2 = $fechaCredito2;
         $model->total1 = $_POST['Ventas']['total1'];
         $model->total2 = $_POST['Ventas']['total2'];
         $model->credito_dias2 = $_POST['Ventas']['credito_dias2'];
         $model->tarjeta_tipo2 = $_POST['Ventas']['tarjeta_tipo2'];
         $model->tarjeta_aprobacion2 = $_POST['Ventas']['tarjeta_aprobacion2'];
         $model->tarjeta_entidad2 = $_POST['Ventas']['tarjeta_entidad2'];
         $model->tarjeta_cuenta_banco2 = $_POST['Ventas']['tarjeta_cuenta_banco2'];
         $model->consignacion_cuenta_banco2 = $_POST['Ventas']['consignacion_cuenta_banco2'];
         $model->consignacion_banco2 = $_POST['Ventas']['consignacion_banco2'];
         $model->consignacion_cuenta2 = $_POST['Ventas']['consignacion_cuenta2'];
         if ($model->save()) {
             //Los detalles de la Compra
             for ($i = 0; $i <= $_POST['variable']; $i++) {
                 if (isset($_POST['producto_' . $i])) {
                     $detalleC = new VentasDetalle();
                     $detalleC->venta_id = $model->id;
                     $detalleC->producto_id = $_POST['producto_' . $i];
                     $detalleC->cantidad = $_POST['cantidad_' . $i];
                     $detalleC->valor = $_POST['valor_' . $i];
                     $detalleC->iva = $_POST['iva_' . $i];
                     $detalleC->total = $_POST['total_' . $i];
                     $detalleC->paciente_id = $model->paciente_id;
                     $detalleC->fecha = $model->fecha;
                     $detalleC->save();
                     //Aumentar inventario
                     $elProducto = ProductoInventario::model()->findByPk($_POST['producto_' . $i]);
                     $elProducto->cantidad = $elProducto->cantidad - $_POST['cantidad_' . $i];
                     $elProducto->save();
                 }
             }
             if ($model->forma_pago == "Cheque") {
                 //Los detalles de la Compra
                 for ($i = 0; $i <= $_POST['variablec']; $i++) {
                     if (isset($_POST['numero_' . $i])) {
                         $detalleC = new VentasCheques();
                         $detalleC->ingresos_id = $model->id;
                         $detalleC->numero = $_POST['numero_' . $i];
                         $detalleC->entidad = $_POST['entidad_' . $i];
                         $detalleC->valor = $_POST['valor_' . $i];
                         $detalleC->f_cobro = Yii::app()->dateformatter->format("yyyy-MM-dd", $_POST['fecha_cobro_' . $i]);
                         $detalleC->save();
                     }
                 }
             }
             if ($model->forma_pago == "Efectivo") {
                 //$this->actionEnvioCorreoVenta($model->id);
                 $laCaja = CajaEfectivo::model()->findByPk($model->personal);
                 if ($laCaja === null) {
                     //Nueva Caja
                     $nuevaCaja = new CajaEfectivo();
                     $nuevaCaja->personal_id = $model->personal;
                     if ($model->total2 > 0) {
                         $nuevaCaja->total = $model->total1;
                     } else {
                         $nuevaCaja->total = $model->total_venta;
                     }
                     $nuevaCaja->save();
                     //Registrar Ingreso en el detalle de caja
                     $nuevaCajaDetalle = new CajaEfectivoDetalle();
                     $nuevaCajaDetalle->caja_efectivo_id = $nuevaCaja->personal_id;
                     if ($model->total2 > 0) {
                         $nuevaCajaDetalle->monto = $model->total1;
                     } else {
                         $nuevaCajaDetalle->monto = $model->total_venta;
                     }
                     $nuevaCajaDetalle->tipo = "Venta";
                     $nuevaCajaDetalle->venta_id = $model->id;
                     $nuevaCajaDetalle->fecha = date("Y-m-d H:i:s");
                     $nuevaCajaDetalle->save();
                 } else {
                     //Actualizar Caja
                     if ($model->total2 > 0) {
                         $laCaja->total = $laCaja->total + $model->total1;
                     } else {
                         $laCaja->total = $laCaja->total + $model->total_venta;
                     }
                     $laCaja->save();
                     //Registrar Ingreso en el detalle de caja
                     $nuevaCajaDetalle = new CajaEfectivoDetalle();
                     $nuevaCajaDetalle->caja_efectivo_id = $model->personal;
                     if ($model->total2 > 0) {
                         $nuevaCajaDetalle->monto = $model->total1;
                     } else {
                         $nuevaCajaDetalle->monto = $model->total_venta;
                     }
                     $nuevaCajaDetalle->tipo = "Venta";
                     $nuevaCajaDetalle->venta_id = $model->id;
                     $nuevaCajaDetalle->fecha = date("Y-m-d H:i:s");
                     $nuevaCajaDetalle->save();
                 }
             }
             //Render de Vista
             $this->redirect(array('view', 'id' => $model->id));
         }
     }
     $this->render('create', array('model' => $model));
 }
コード例 #2
0
ファイル: Servicios.php プロジェクト: cicb/tpc
 public function registrarVenta()
 {
     $referencia = $this->referencia;
     $pv = $this->pv;
     try {
         $lugares = $this->validacionesVenta();
         $numeroLugares = sizeof($lugares);
     } catch (Exception $e) {
         $this->registrarError($e);
         throw $e;
         // return $e->getCode()	;
     }
     $venta = new Ventas();
     $venta->PuntosventaId = $pv;
     $venta->VentasSec = "FARMATODO";
     $venta->TempLugaresTipUsr = '******';
     $venta->UsuariosId = 2;
     $venta->VentasSta = 'FIN';
     $venta->VentasMonMetEnt = 0;
     $venta->VentasTip = 'EFECTIVO';
     $venta->VentasNumRef = $referencia;
     /*  
      * COMIENZA LA TRANSACCION
      */
     $transaction = Yii::app()->db->beginTransaction();
     try {
         if ($venta->save(false)) {
             # Si la venta se pudo realizar
             ### !!! SE INSERTAN LOS VENTASLEVEL1 !!!
             $query = " INSERT INTO ventaslevel1 (\n    \t\t\t\t\tSELECT '%s' AS VentasId, \n\t\t\t\t\t\t\tt1.EventoId,  \n\t\t\t\t\t\t\tt1.FuncionesId,\n\t\t\t\t\t\t    t1.ZonasId, \n\t\t\t\t\t\t    t1.SubzonaId,\n\t\t\t\t\t\t    t1.FilasId,  \n\t\t\t\t\t\t    t1.LugaresId,\n\t\t\t\t\t\t    t1.DescuentosId,  \n\t\t\t\t\t\t    IFNULL(t2.VentasCosBolDes,0)\n\t\t\t\t\t\t    \t\t\t\t\tAS VentasMonDes,\n\t    \t\t\t\t\t'NORMAL' \t\t\tAS VentasBolTip,\n\t                        t2.VentasCosBol \tAS VentasCosBol,  \n\t                        t2.VentasCarSer-IFNULL(t2.VentasCarSerDes,0) \n\t\t\t\t\t\t\t\t\t\t\t\tAS VentasCarSer,\n\t                        'VENDIDO' \t\t\tAS VentasSta,\n\t                        FLOOR(100000000000 + RAND() * (999999999999 - 100000000000)) \n    \t\t\t\t\t\t\t\t\t\t\tAS LugaresNumBol,  \n\t                        '' \t\t\t\t\tAS VentasBolPara,\n\t                        CONCAT_WS('-',\n\t                        \tCONCAT_WS('.',\n\t                        \t\tt1.EventoId,t1.FuncionesId,t1.ZonasId,\n\t                        \t\tt1.SubzonaId,t1.FilasId, t1.LugaresId\n\t                        \t\t),\n\t                        \tCONCAT_WS('.',MONTH(CURDATE()),DAY(CURDATE()) ),\n\t                        \t'F%s'\n\t                        \t) \t\t\t\tAS VentasCon,\n\t                        '0' \t\t\t\tAS CancelUsuarioId,\n\t                        '0000-00-00' \t\t\t\tAS CancelFecHor \n                        FROM  templugares as t1 \n                        INNER JOIN preciostemplugares t2 \n                        \t\t\tON (t2.EventoId=t1.EventoId)  \n                        \t\t\tAND (t2.FuncionesId=t1.FuncionesId)\n                        \t\t\tAND (t2.ZonasId=t1.ZonasId) \n                        \t\t\tAND (t2.SubzonaId=t1.SubzonaId) \n                        \t\t\tAND (t2.FilasId=t1.FilasId) \n                        \t\t\tAND (t2.LugaresId=t1.LugaresId) \n                        \t\t\tAND (t2.PuntosventaId=t1.PuntosventaId) \n                        WHERE  (tempLugaresNumRef = '%s'))";
             $query = sprintf($query, $venta->VentasId, $pv, $referencia);
             try {
                 $ret = Yii::app()->db->createCommand($query)->execute();
             } catch (Exception $e) {
                 $this->registrarError($e);
                 throw $e;
                 return 300;
             }
             if ($ret != $numeroLugares) {
                 throw new Exception("Numero de ventaslevel1 insertados no coincide", 301);
                 return 301;
             }
             // Pone todos los templugares en estatus de FALSE (Como vendidos)
             $numTemplugares = Templugares::model()->updateAll(array('TempLugaresSta' => 'FALSE'), "tempLugaresNumRef = '{$referencia}'");
             if ($numTemplugares != $numeroLugares) {
                 throw new Exception("Numero de templugares actualizados con status FALSE difiere", 302);
                 return 302;
             }
             // Pone todos los lugares en estatus de FALSE (Como vendidos)
             $actualizados = 0;
             foreach ($lugares as $tmplugar) {
                 if (is_array($tmplugar)) {
                     Lugares::model()->updateByPk(array_slice($tmplugar, 0, 6), array('LugaresStatus' => 'FALSE'));
                     $actualizados++;
                 }
             }
             if ($actualizados != $numeroLugares) {
                 throw new Exception("Numero de lugares con status FALSE difiere", 303);
                 return 303;
             }
             // Si llega a este punto sin problemas entonces compromete la BD
         } else {
             throw new Exception("No fue posible guardar la venta con los datos actuales", 304);
         }
     } catch (Exception $e) {
         //Algo sucedio, no se compromete la base de datos, ningun dato guardado
         $transaction->rollback();
         $this->registrarError($e);
         return $e->getCode();
     }
     $ventaslevel1 = Ventaslevel1::model()->findAllByAttributes(array('VentasId' => $venta->VentasId, 'VentasSta' => 'VENDIDO'));
     if (sizeof($ventaslevel1) != sizeof($lugares)) {
         #Si el numero de ventaslevel1 es distinto que el numero de templugares seleccionados en primer lugar
         #Entonces hubo un error
         $transaction->rollback();
         $this->registrarError(new Exception("No se paso la prueba de integridad en el registro de ventas", 305));
         return 305;
     } else {
         /*Verifica que los numero de boletos generados sean unicos
          */
         // foreach ($ventaslevel1 as $vl1 ) {
         // 	if (is_object($vl1)) {
         // 		# code...
         // 		$vt1->LugaresNumBol=$this->generarCodigoBarras();
         // 		$vl1->save(false);
         // 	}
         // }
         $transaction->commit();
         return array('venta' => $venta, 'ventaslevel1' => $ventaslevel1);
         return 1000;
     }
 }