コード例 #1
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
        //encapsula el recalculo de la ficha al dia de hoy
        public FICHA CalcularFichaAlDiaDeHoy(FICHA Ficha)
        {
            decimal TotalFicha = 0;
            if (Ficha != null)
            {
                foreach (var detalle in Ficha.DETALLES_FICHA)
                {
                    decimal TotalDetalle = 0;
                    if (detalle.PRO_ID != null) //es producto
                    {
                        decimal PRECIOUNIDAD = (detalle.PRODUCTO.PRO_ESTADOPROMO == true) ? (decimal)detalle.PRODUCTO.PRO_PRECIOPROMO : detalle.PRODUCTO.PRO_PRECIOVTA;
                        TotalDetalle = PRECIOUNIDAD * detalle.DETF_CANTIDAD;
                        Ficha.DETALLES_FICHA.First(x => x.DETF_ID == detalle.DETF_ID).DETF_TOTAL = TotalDetalle;
                    }
                    if (detalle.CAT_ID != null) //es categoria
                    {
                        TotalDetalle += detalle.DETF_TOTAL;
                    }
                    if (detalle.ENV_ID != null) //es envase
                    {
                        var PRECIOUNIDAD = detalle.ENVASE.ENV_PRECIO;
                        TotalDetalle = PRECIOUNIDAD * detalle.DETF_CANTIDAD;
                        Ficha.DETALLES_FICHA.First(x => x.DETF_ID == detalle.DETF_ID).DETF_TOTAL = TotalDetalle;
                    }
                    TotalFicha += TotalDetalle;
                }

                Ficha.FIC_TOTAL = TotalFicha;
            }

            return Ficha;
        }
コード例 #2
0
ファイル: mFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 public void Alta(FICHA objeto)
 {
     using (SIST_SUPERMERCADOEntities ctx = SIST_SUPERMERCADOEntities.ObtenerInstancia())
     {
         //AUDITORIA
         objeto.AU_ACCION = "A";
         objeto.AU_FECHA_HORA = System.DateTime.Now;
         objeto.AU_USUARIO = Common.Seguridad.UsuarioLog;
         //
         ctx.FICHA.AddObject(objeto);
         ctx.SaveChanges();
     }
 }
コード例 #3
0
ファイル: mFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 public void Modificacion(FICHA objeto)
 {
     using (SIST_SUPERMERCADOEntities ctx = SIST_SUPERMERCADOEntities.ObtenerInstancia())
     {
         //AUDITORIA
         objeto.AU_ACCION = "M";
         objeto.AU_FECHA_HORA = System.DateTime.Now;
         objeto.AU_USUARIO = Common.Seguridad.UsuarioLog;
         //
         ctx.FICHA.Attach(objeto);
         ctx.ObjectStateManager.ChangeObjectState(objeto, System.Data.EntityState.Modified);
         ctx.SaveChanges();
     }
 }
コード例 #4
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
        public decimal CalcularTotalFichaAlDiaDeHoy(FICHA Ficha)
        {
            decimal TotalFicha = 0;
            if (Ficha != null)
            {
                foreach (var detalle in Ficha.DETALLES_FICHA)
                {
                    if (detalle.PRO_ID != null) //es producto
                    {
                        var PRECIOUNIDAD = (detalle.PRODUCTO.PRO_ESTADOPROMO == true) ? (decimal)detalle.PRODUCTO.PRO_PRECIOPROMO : detalle.PRODUCTO.PRO_PRECIOVTA;
                        var SUBTOTAL = PRECIOUNIDAD * detalle.DETF_CANTIDAD;
                        TotalFicha += SUBTOTAL;
                    }
                    if (detalle.CAT_ID != null) //es categoria
                    {
                        TotalFicha += detalle.DETF_TOTAL;
                    }
                    if (detalle.ENV_ID != null) //es envase
                    {
                        var SUBTOTAL = (decimal)detalle.ENVASE.ENV_PRECIO * detalle.DETF_CANTIDAD;
                        TotalFicha += SUBTOTAL;
                    }
                }
            }

            return TotalFicha;
        }
コード例 #5
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 //public void BajaLogica(FICHA entidad)
 //{
 //    entidad.CLI_ESTADO = false;
 //    mFICHAS.Modificacion();
 //}
 public void BajaFisica(FICHA entidad)
 {
     mFICHAS.Baja(entidad);
 }
コード例 #6
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 public FICHA AltaConRetorno(FICHA entidad)
 {
     return mFICHAS.AltaConRetorno(entidad);
 }
コード例 #7
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 public void Alta(FICHA entidad)
 {
     mFICHAS.Alta(entidad);
 }
コード例 #8
0
ファイル: cFICHA.cs プロジェクト: maurojuze/super-mercado-v2
 public void Modificacion(FICHA entidad)
 {
     mFICHAS.Modificacion(entidad);
 }
コード例 #9
0
 /// <summary>
 /// Crear un nuevo objeto FICHA.
 /// </summary>
 /// <param name="fIC_ID">Valor inicial de la propiedad FIC_ID.</param>
 /// <param name="fIC_FECHAAPERTURA">Valor inicial de la propiedad FIC_FECHAAPERTURA.</param>
 /// <param name="fIC_ESTADOAPERTURA">Valor inicial de la propiedad FIC_ESTADOAPERTURA.</param>
 /// <param name="cLI_ID">Valor inicial de la propiedad CLI_ID.</param>
 public static FICHA CreateFICHA(global::System.Int32 fIC_ID, global::System.DateTime fIC_FECHAAPERTURA, global::System.Boolean fIC_ESTADOAPERTURA, global::System.Int32 cLI_ID)
 {
     FICHA fICHA = new FICHA();
     fICHA.FIC_ID = fIC_ID;
     fICHA.FIC_FECHAAPERTURA = fIC_FECHAAPERTURA;
     fICHA.FIC_ESTADOAPERTURA = fIC_ESTADOAPERTURA;
     fICHA.CLI_ID = cLI_ID;
     return fICHA;
 }
コード例 #10
0
 /// <summary>
 /// Método desusado para agregar un nuevo objeto al EntitySet FICHA. Considere la posibilidad de usar el método .Add de la propiedad ObjectSet&lt;T&gt; asociada.
 /// </summary>
 public void AddToFICHA(FICHA fICHA)
 {
     base.AddObject("FICHA", fICHA);
 }
コード例 #11
0
 public List<DETALLE_FICHA> ObtenerDetallesPorFicha(FICHA ficha)
 {
     var query = ObtenerTodos()
         .Where(x => x.FIC_ID == ficha.FIC_ID);
     return query.ToList();
 }
コード例 #12
0
        private bool Cobrar_Venta()
        {
            decimal totalPago = 0;
            decimal totalDifTarjeta = 0;

            if (dgvGrilla.DataSource == null)
            {
                MostrarMensajeAdvertencia("Debe ingresar al menos un producto para la venta");
                txtCodigoBarra.Text = string.Empty;
                txtCodigoBarra.Focus();
                return false;
            }

            //PREGUNTA SI ES EN EFECTIVO O CTA CTE O TARJETA O CHEQUE
            //SI ES EN EFECTIVO ABRE FRM PAGACON
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Efectivo))
            {
                frmPAGACON frm = new frmPAGACON(Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || MontoPagaCon == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Monto a Pagar.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(MontoPagaCon).ToString("0.000");
            }

            //SI ES CON CTA CTE ABRE FRM SELCCIONAR CTA CTE
            if (FormaPago.FOR_DESCRIPCION.Contains("CTA CTE"))
            {
                //selecciono el cliente y muestro cartel que diga "La Vta de total "", se asignara a la cta cte del cliente "cliente",
                //el saldo total de la deuda de la cta cte es "saldo cta cte". OK para confirmar CANCELAR para cambiar la foma de pago
                //si viene por ok doy de alta el movimiento en la cta cte del cliente y dejo habilitado solamente los botones de imprimir ticket
                //si es cancelar vuelve al frm vtas y habilita el boton frm forma de pago
                //ABRO FRM BUSCAR CLIENTE
                if (!ClienteConsumidorFinal)
                {
                    if (Cliente == null)
                    {
                        frmBUSCACLIENTECONCTACTE frm = new frmBUSCACLIENTECONCTACTE(Constantes.venta);
                        DialogResult dr = frm.ShowDialog();
                        if (dr != DialogResult.OK)
                        {
                            if (Cliente == null)
                            {
                                MostrarMensajeAdvertencia("La forma de pago es por medio de CTA CTE, para ello debe seleccionar un cliente");
                                return false;
                            }
                        }
                    }

                    var CTA_CLIENTE = cCLIENTE.ObtenerCtaCteCliente(Cliente);
                    if (CTA_CLIENTE == null)
                    {
                        MostrarMensajeAdvertencia("El Cliente seleccionado no tiene creada una Cta Cte.\n Para crear una debe comunicarse con un usuario administrador.");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    if (!ValidaTopeCtaCte())
                    {
                        return false;
                    }

                    var SALDO_CTA = CTA_CLIENTE.CCC_SALDO + Convert.ToDecimal(txtTotal.Text);
                    var rta = MostrarMensajePreguntaSI_NO("El total de la venta $" + txtTotal.Text + " , será asignada a la cta cte del cliente: " + Cliente.CLI_NOMBREYAPELLIDO + " .\n El saldo de la cuenta es: $" + SALDO_CTA + " .\n OK para confirmar o CANCEL para volver a la venta.");
                    if (!rta)
                    {
                        return false;
                    }
                    else
                    {
                        lblPagaCon.Text = Convert.ToDecimal(txtTotal.Text).ToString("0.000");
                    }
                }
            }

            //SI ES CON CHEQUE CREA Y DA DE ALTA EL CHEQUE
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Cheque))
            {
                //ALTA CHEQUE
                frmCHEQUE frm = new frmCHEQUE(Cheque, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Cheque == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Cheque.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(Cheque.CHE_VALOR).ToString("0.000");
            }

            //SI ES CON TARJETA CREA Y DA DE ALTA DE TARJETA
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Tarjeta))
            {
                frmTARJETA frm = new frmTARJETA(Tarjeta, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Tarjeta == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar la Tarjeta.");
                    return false;
                }

                lblDiferenciaTarjeta.Visible =
                        txtDiferenciaTarjeta.Visible = true;

                lblPagaCon.Text = Convert.ToDecimal(Tarjeta.TARJ_TOTALAPAGAR).ToString("0.000");
                txtDiferenciaTarjeta.Text = Convert.ToDecimal(Tarjeta.TARJ_DIFTARJETA).ToString("0.000");
                txtTotal.Text = Convert.ToDecimal(Tarjeta.TARJ_TOTALAPAGAR).ToString("0.00");
            }

            //SI ES CON NOTA DE CREDITO
            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.NotaCredito))
            {
                //BUSCO LA NOTA DE CREDITO
                frmNOTACREDITO frm = new frmNOTACREDITO(Nota_Credito, Convert.ToDecimal(txtTotal.Text), "frmVENTAS", null);
                DialogResult dr = frm.ShowDialog();
                if (dr != DialogResult.OK || Nota_Credito == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar una Nota de Crédito.");
                    return false;
                }

                lblPagaCon.Text = Convert.ToDecimal(Nota_Credito.NOT_TOTAL).ToString("0.000");
            }

            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Multiple))
            {
                frmMULTIPLEPAGO frm = new frmMULTIPLEPAGO(eMULTIPLE, Convert.ToDecimal(txtTotal.Text));
                DialogResult drRESULTADO = frm.ShowDialog();

                if (frmVENTAS.ListaMultiplesPagos == null)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar pagos Multiples.");
                    return false;
                }

                foreach (var item in frmVENTAS.ListaMultiplesPagos)
                {
                    switch (item.FORM_PAGO)
                    {
                        case Constantes.Cheque:
                            totalPago += (decimal)item.CHE_VALOR;
                            break;

                        case Constantes.NotaCredito:
                            totalPago += (decimal)item.NOTA_CREDITO.NOT_TOTAL;
                            break;

                        case Constantes.Tarjeta:
                            totalPago += (decimal)item.TARJ_TOTALAPAGAR;
                            totalDifTarjeta += (decimal)item.TARJ_DIFTARJETA;
                            break;

                        case Constantes.Efectivo:
                            totalPago += item.EFEC_MONTO;
                            break;

                        default: break;
                    }
                }

                //valida si MontoPagaCon == null porque cancelo
                if (totalPago == null || totalPago == 0)
                {
                    MostrarMensajeAdvertencia("Debe Ingresar el Monto a Pagar.");
                    return false;
                }

                lblDiferenciaTarjeta.Visible =
                    txtDiferenciaTarjeta.Visible = true;

                lblPagaCon.Text = Convert.ToDecimal(totalPago).ToString("0.000");
                txtDiferenciaTarjeta.Text = Convert.ToDecimal(totalDifTarjeta).ToString("0.000");
                txtTotal.Text = Convert.ToDecimal(totalPago).ToString("0.00");
            }

            if (FormaPago.FOR_DESCRIPCION.Contains(Constantes.Ficha))
            {
                if (!ClienteConsumidorFinal)
                {
                    if (Cliente == null)
                    {
                        frmBUSCACLIENTECONCTACTE frm = new frmBUSCACLIENTECONCTACTE(Constantes.venta);
                        DialogResult dr = frm.ShowDialog();
                        if (dr != DialogResult.OK)
                        {
                            if (Cliente == null)
                            {
                                MostrarMensajeAdvertencia("La forma de pago es por medio de FICHA, para ello debe seleccionar un cliente");
                                return false;
                            }
                        }
                    }

                    var CTA_CLIENTE = cCLIENTE.ObtenerCtaCteCliente(Cliente);
                    if (CTA_CLIENTE == null)
                    {
                        MostrarMensajeAdvertencia("El Cliente seleccionado no tiene creada una Cta Cte. \n Para crear una debe comunicarse con un usuario administrador.");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    var FICHA_CLIENTE = cFICHA.ObtenerFichaAbiertaCliente(Cliente);
                    if (FICHA_CLIENTE == null)
                    {
                        var rta = MostrarMensajePreguntaSI_NO("El Cliente seleccionado no tiene ninguna ficha abierta. Desea abrirle una?");
                        if (!rta)
                        {
                            return false;
                        }
                        else
                        {
                            //creo una ficha nueva
                            Ficha = new FICHA();
                            Ficha.CLI_ID = Cliente.CLI_ID;
                            Ficha.FIC_ESTADOAPERTURA = true;
                            Ficha.FIC_FECHAAPERTURA = DateTime.Now;
                            Ficha.FIC_TOTAL = 0;
                            Ficha = cFICHA.AltaConRetorno(Ficha);
                        }
                    }
                    else
                    {
                        //tomo la ficha abierta del cliente
                        Ficha = FICHA_CLIENTE;
                    }

                    //VALIDACION DE TOPE CTA CTE EN LA VENTA DE FICHA
                    var SALDO_CTA = CTA_CLIENTE.CCC_SALDO;
                    var TotalEstimadoFIcha = cFICHA.CalcularTotalFichaAlDiaDeHoy(Ficha);
                    var totalDeuda = SALDO_CTA + Convert.ToDecimal(txtTotal.Text) + TotalEstimadoFIcha;
                    if (CTA_CLIENTE.CLIENTE.CLI_MAXTOPE_CTACTE != 0 && CTA_CLIENTE.CLIENTE.CLI_MAXTOPE_CTACTE < totalDeuda)
                    {
                        MostrarMensajeAdvertencia("No se puede realizar la vta mediante ficha porque la suma de la ficha actual ($" + txtTotal.Text + ") y el saldo de la cta cte ($" + SALDO_CTA + ") supera el tope maximo permitido al cliente: " + Cliente.CLI_NOMBREYAPELLIDO + ".");
                        btnCliente.Enabled = true;
                        return false;
                    }

                    var rta2 = MostrarMensajePreguntaSI_NO("Será asignada a la FICHA del cliente: " + Cliente.CLI_NOMBREYAPELLIDO + " . \n El saldo de la cuenta corriente es: $" + SALDO_CTA + " . \n Aceptar para confirmar o Cancelar para volver a la venta.");
                    if (!rta2)
                    {
                        return false;
                    }

                    lblPagaCon.Text = Convert.ToDecimal(txtTotal.Text).ToString("0.000");
                }
            }

            lblVuelto.Text = (Convert.ToDecimal(lblPagaCon.Text) - Convert.ToDecimal(txtTotal.Text)).ToString();

            PagaConVenta = lblPagaCon.Text;
            VueltoVenta = lblVuelto.Text;
            TotalVenta = txtTotal.Text;

            //visibilidad y habilitado de botones
            txtCodigoBarra.Enabled = false;
            cmbProducto.Enabled = false;
            btnDESCUENTO.Enabled = false;
            btnELIMINARPRODUCTO.Enabled = false;
            btnCANTIDAD.Enabled = false;
            btnPRODUCTOSINCODIGO.Enabled = false;

            btnVentaAnterior.Enabled = ImpresoraOK;
            btnTICKETFISCAL.Enabled = ImpresoraOK;
            btnNoTicket.Enabled = true;
            btnCancela.Enabled = true;
            btnTICKETFISCAL.Focus();

            return true;
        }
コード例 #13
0
 public List<DETALLE_FICHA> ObtenerDetallesPorFicha(FICHA ficha)
 {
     return mDETALLE_FICHAS.ObtenerDetallesPorFicha(ficha);
 }
コード例 #14
0
        private void dgvGRILLA_FICHAS_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgvGRILLA_FICHAS.CurrentRow == null)
                {
                    MostrarMensajeAdvertencia(Mensajes.SeleccionarItem);
                    return;
                }

                ARMA_GRILLA_DETALLE_FICHA();

                var fichaSeleccionada = cFICHA.ObtenerPorID(Convert.ToInt32(dgvGRILLA_FICHAS.CurrentRow.Cells[0].Value));
                var fichaAldiaDeHoy = new FICHA();
                fichaAldiaDeHoy = cFICHA.CalcularFichaAlDiaDeHoy(fichaSeleccionada);
                decimal TotalFicha = (decimal)fichaAldiaDeHoy.FIC_TOTAL;

                lblTOTALFICHA.Text = TotalFicha.ToString("0.000");
            }
            catch (Exception ex)
            {
                ProcesarExcepcion(ex);
            }
        }
コード例 #15
0
        private bool Cobrar_Venta(FICHA fichaAldiaDeHoy)
        {
            var CTA_CLIENTE = cCLIENTESES.ObtenerCtaCteCliente(Cliente);
            if (CTA_CLIENTE == null)
            {
                MostrarMensajeAdvertencia("El Cliente seleccionado no es válido.");
                return false;
            }

            var tot = fichaAldiaDeHoy.FIC_TOTAL;
            var SALDO_CTA = CTA_CLIENTE.CCC_SALDO + tot;
            var rta = MostrarMensajePreguntaSI_NO("El total de la ficha $ " + tot + ", será asignada a la cta cte del cliente " + Cliente.CLI_NOMBREYAPELLIDO + ".\n El saldo de la cuenta es: " + SALDO_CTA + ".\n OK para confirmar o CANCEL para volver a la vta.");
            if (!rta)
            {
                return false;
            }

            return true;
        }
コード例 #16
0
        private void btnCERRARFICHA_Click(object sender, EventArgs e)
        {
            //GENERAR LA VENTA SIN ACTUALIZAR STOCK PORQUE EL STOCK YA SE RESTO CUANDO SE VENDIO
            try
            {
                if (dgvGRILLA_FICHAS.CurrentRow == null)
                {
                    MostrarMensajeAdvertencia(Mensajes.SeleccionarItem);
                    return;
                }

                if (!validar_CerrarFicha())
                    return;

                var fichaSeleccionada = cFICHA.ObtenerPorID(Convert.ToInt32(dgvGRILLA_FICHAS.CurrentRow.Cells[0].Value));
                var fichaAldiaDeHoy = new FICHA();
                fichaAldiaDeHoy = cFICHA.CalcularFichaAlDiaDeHoy(fichaSeleccionada);
                var TotalFicha = fichaAldiaDeHoy.FIC_TOTAL;

                var rta = MostrarMensajePreguntaSI_NO("Al cerrar la ficha se genera una venta con cuenta corriente.\n Se guardará un movimiento en la cta cte del cliente " + ((CLIENTE)cmbCLIENTE.SelectedItem).CLI_NOMBREYAPELLIDO + ", con un total del movimiento de " + TotalFicha + ". Desea Continuar?\r\n.");
                if (!rta)
                    return;

                if (!Valida_Caja())
                {
                    return;
                };

                if (!Cobrar_Venta(fichaAldiaDeHoy))
                {
                    return;
                };

                using (TransactionScope TRANSACCION = new TransactionScope())
                {
                    //Comprobante = new COMPROBANTE();
                    //TipoComprobante = cTIPO_COMPROBANTES.ObtenerPorDescripcion(Constantes.Ticket);
                    //int nroComprobante = (int)TipoComprobante.TIC_ULTIMONUMERO;
                    //Comprobante.TIC_ID = TipoComprobante.TIC_ID;
                    //Comprobante.COM_NROCOMPROBANTE = nroComprobante.ToString();
                    //TipoComprobante.TIC_ULTIMONUMERO = nroComprobante + 1;

                    //cTIPO_COMPROBANTES.Modificacion(TipoComprobante);
                    //Comprobante = cCOMPROBANTE.AltaConRetorno(Comprobante);

                    VENTA NuevaVta = new VENTA();
                    NuevaVta.VTA_FECHA = DateTime.Now;
                    NuevaVta.VTA_COLOR = "B";
                    NuevaVta.VTA_PORCENTAJEDESCUENTO = 0;
                    NuevaVta.VTA_DIFTARJETA = 0;
                    NuevaVta.VTA_SUBTOTAL = fichaAldiaDeHoy.FIC_TOTAL;
                    NuevaVta.VTA_TOTAL = fichaAldiaDeHoy.FIC_TOTAL;
                    NuevaVta.VTA_CACELADA = false;
                    NuevaVta.FOR_ID = cFORMA_PAGO.ObtenerPorDescripcion(Constantes.CtaCte).FOR_ID;
                    NuevaVta.CAJ_ID = CajaPerteneciente.CAJ_ID;
                    //NuevaVta.COM_ID = Comprobante.COM_ID;
                    NuevaVta.VTA_MONTOPAGO = 0;

                    // SI ES FACTURA A ASEGURARSE QUE SE TIENEN LOS DATOS DEL CLIENTE SI ES.
                    NuevaVta.VTA_CONSUMIDORFINAL = false;
                    NuevaVta.CLI_ID_CONSUMIDOR = Cliente.CLI_ID;

                    NuevaVta = cVENTAS.AltaConRetorno(NuevaVta);

                    foreach (var linea in fichaAldiaDeHoy.DETALLES_FICHA)
                    {
                        LINEA_VENTA NuevaLinea = new LINEA_VENTA();

                        if (linea.PRO_ID != null) //es producto
                        {
                            NuevaLinea.LIN_DESCRIPCION = linea.DETF_DESCRIPCION;
                            NuevaLinea.LIN_DESCRESUMIDA = linea.DETF_DESCRESUMIDA;
                            NuevaLinea.LIN_PRECIOUNIDAD = (linea.PRODUCTO.PRO_ESTADOPROMO == true) ? (decimal)linea.PRODUCTO.PRO_PRECIOPROMO : linea.PRODUCTO.PRO_PRECIOVTA;
                            NuevaLinea.LIN_CANTIDAD = linea.DETF_CANTIDAD;
                            NuevaLinea.LIN_TOTAL = linea.PRODUCTO.PRO_PRECIOVTA * linea.DETF_CANTIDAD;
                            NuevaLinea.LIN_ESTADOPROMO = linea.DETF_ESTADOPROMO;
                            NuevaLinea.PRO_ID = linea.PRO_ID;

                            NuevaLinea.VTA_ID = NuevaVta.VTA_ID;
                            cLINEA_VENTA.Alta(NuevaLinea);

                            if (linea.DETF_TOTAL != NuevaLinea.LIN_TOTAL)
                            {
                                linea.DETF_TOTAL = NuevaLinea.LIN_TOTAL;
                                cDETALLE_FICHA.Modificacion(linea);
                            }
                        }
                        if (linea.CAT_ID != null) //es categoria
                        {
                            NuevaLinea.LIN_DESCRIPCION = linea.DETF_DESCRIPCION;
                            NuevaLinea.LIN_DESCRESUMIDA = linea.DETF_DESCRESUMIDA;
                            NuevaLinea.LIN_PRECIOUNIDAD = linea.DETF_PRECIOUNIDAD;
                            NuevaLinea.LIN_CANTIDAD = linea.DETF_CANTIDAD;
                            NuevaLinea.LIN_TOTAL = linea.DETF_TOTAL;
                            NuevaLinea.LIN_ESTADOPROMO = linea.DETF_ESTADOPROMO;
                            NuevaLinea.CAT_ID = linea.CAT_ID;

                            NuevaLinea.VTA_ID = NuevaVta.VTA_ID;
                            cLINEA_VENTA.Alta(NuevaLinea);
                        }

                        if (linea.ENV_ID != null) //es envase
                        {
                            NuevaLinea.LIN_DESCRIPCION = linea.DETF_DESCRIPCION;
                            NuevaLinea.LIN_DESCRESUMIDA = linea.DETF_DESCRESUMIDA;
                            NuevaLinea.LIN_PRECIOUNIDAD = linea.ENVASE.ENV_PRECIO;
                            NuevaLinea.LIN_CANTIDAD = linea.DETF_CANTIDAD;
                            NuevaLinea.LIN_TOTAL = linea.ENVASE.ENV_PRECIO * linea.DETF_CANTIDAD;
                            NuevaLinea.LIN_ESTADOPROMO = linea.DETF_ESTADOPROMO;
                            NuevaLinea.ENV_ID = linea.ENV_ID;

                            NuevaLinea.VTA_ID = NuevaVta.VTA_ID;
                            cLINEA_VENTA.Alta(NuevaLinea);

                            if (linea.DETF_TOTAL != NuevaLinea.LIN_TOTAL)
                            {
                                linea.DETF_TOTAL = NuevaLinea.LIN_TOTAL;
                                cDETALLE_FICHA.Modificacion(linea);
                            }
                        }
                    }

                    //SI ES UNA CTA CTE LA FORMA DE PAGO DOY DE ALTA EL MOVIMIENTO DE LA CTA CTE Y ACTUALIZO LA CTA DEL CLIENTE
                    TIPO_MOVIMIENTO eTIPO_MOVIMIENTO = cTIPO_MOVIMIENTOS.ObtenerPorDescripcion(TipoComprobante.TIC_DESCRIPCION);

                    //GENERO LA CUENTA CORRIENTE
                    CONTROLADORA.cCTACTE_CLIENTE cCTACTE_CLIENTES = CONTROLADORA.cCTACTE_CLIENTE.ObtenerInstancia();
                    CONTROLADORA.cMOVIMIENTO_CTACTE_CLIENTE cMOVIMIENTO_CTACTE_CLIENTES = CONTROLADORA.cMOVIMIENTO_CTACTE_CLIENTE.ObtenerInstancia();

                    if (eTIPO_MOVIMIENTO == null)
                    {
                        eTIPO_MOVIMIENTO = cTIPO_MOVIMIENTOS.ObtenerPorDescripcion(TipoComprobante.TIC_DESCRIPCION);
                    }

                    MOVIMIENTO_CTACTE_CLIENTE eMOV_CTA_CTE_CLI = new MOVIMIENTO_CTACTE_CLIENTE();

                    var cta_cliente = cCLIENTESES.ObtenerCtaCteCliente(Cliente);

                    eMOV_CTA_CTE_CLI.TIPM_ID = eTIPO_MOVIMIENTO.TIPM_ID;
                    eMOV_CTA_CTE_CLI.MCCC_VALORMOVIMIENTO = NuevaVta.VTA_TOTAL;
                    eMOV_CTA_CTE_CLI.MCCC_CONCEPTO = Constantes.Debe;
                    eMOV_CTA_CTE_CLI.MCCC_FECHAMOVIMIENTO = NuevaVta.VTA_FECHA;
                    eMOV_CTA_CTE_CLI.MCCC_SALDOMOVIMIENTO = NuevaVta.VTA_TOTAL;
                    eMOV_CTA_CTE_CLI.CCC_ID = cta_cliente.CCC_ID;
                    eMOV_CTA_CTE_CLI.VTA_ID = NuevaVta.VTA_ID;

                    cta_cliente.CCC_SALDO += NuevaVta.VTA_TOTAL;

                    cCTACTE_CLIENTES.Modificacion(cta_cliente);
                    cMOVIMIENTO_CTACTE_CLIENTES.Alta(eMOV_CTA_CTE_CLI);

                    //actualizo la ficha
                    eFicha = fichaAldiaDeHoy;

                    eFicha.VTA_ID = NuevaVta.VTA_ID;
                    eFicha.FIC_FECHACIERRE = DateTime.Now;
                    eFicha.FIC_TOTAL = fichaAldiaDeHoy.FIC_TOTAL;
                    eFicha.FIC_ESTADOAPERTURA = false;

                    cFICHA.Modificacion(eFicha);

                    //actualizo los detalle de la ficha
                    foreach (var item in eFicha.DETALLES_FICHA)
                    {
                        if (item.PRODUCTO != null) // si no es una categoria
                        {
                            item.DETF_PRECIOCOSTO = item.PRODUCTO.PRO_COSTO;
                            item.DETF_PRECIOUNIDAD = (item.PRODUCTO.PRO_ESTADOPROMO == true) ? (decimal)item.PRODUCTO.PRO_PRECIOPROMO : item.PRODUCTO.PRO_PRECIOVTA;
                            item.DETF_ESTADOPROMO = item.PRODUCTO.PRO_ESTADOPROMO;
                            item.DETF_PRECIOUNIDAD = item.PRODUCTO.PRO_PRECIOVTA;
                            item.DETF_TOTAL = item.DETF_PRECIOUNIDAD * item.DETF_CANTIDAD;

                            cDETALLE_FICHA.Modificacion(item);
                        }
                    }

                    cVENTAS.Modificacion(NuevaVta);

                    //TODO: sacar mensaje
                    MostrarMensajeInformativo("La Ficha se realizó con éxito, a continuación se imprimira el Comprobante.");
                    ImprimirReporteFicha(eFicha.FIC_ESTADOAPERTURA);

                    TRANSACCION.Complete();
                }

                ARMA_GRILLA_FICHA();
                dgvGRILLA_DETALLE_FICHA.DataSource = null;
            }
            catch (Exception ex)
            {
                ProcesarExcepcion(ex);
            }
        }