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)); }
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; } }