private void GuardarFactura(Pago.Pago pago) { var _dsctoGlobalPorct = pago.DescuentoPorct; var _dsctoGlobalMonto = pago.Descuento; var _cargoGlobalMonto = 0.0m; var _cargoGlobalPorct = 0.0m; var _montoDivisa = pago.MontoPagarDivisa; var _montoTotal = pago.MontoPagar; var _cambioDar = pago.MontoCambioDar_MonedaNacional; var _montoRecibido = pago.MontoRecibido; var _isCredito = pago.IsCredito ? "S" : "N"; var _saldoPendiente = pago.IsCredito ? pago.MontoPagar: 0.0m; var _tipoDocumento = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.Factura; var _signo = 1; var _aplica = ""; var _serie = _series.ParaFactura; var _control = _series.ControlParaFactura; var _correlativo = _series.CorrelativoParaFactura + 1; var _condicionPago = pago.IsCredito ? "CREDITO" : "CONTADO"; var _documentoNombre = "FACTURA"; var _autoConceptoMv = _movConceptoInv.Venta.Auto; var _codigoConceptoMv = _movConceptoInv.Venta.Codigo; var _nombreConceptoMv = _movConceptoInv.Venta.Nombre; if (_modoFuncion == Enumerados.EnumModoFuncion.NotaCredito) { _cambioDar = 0.0m; _montoRecibido = 0.0m; _aplica = _documentoVenta.Documento; _tipoDocumento = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaCredito; _signo = -1; _serie = _series.ParaNotaCredito; _control = _series.ControlParaNotaCredito; _correlativo = _series.CorrelativoParaNtCredito + 1; _documentoNombre = "NOTA CREDITO"; _autoConceptoMv = _movConceptoInv.DevVenta.Auto; _codigoConceptoMv = _movConceptoInv.DevVenta.Codigo; _nombreConceptoMv = _movConceptoInv.DevVenta.Nombre; } _ctrItem.setDescuentoGlobal(_dsctoGlobalPorct); _ctrItem.setCargoGlobal(_cargoGlobalPorct); var rt1 = Sistema.MyData2.Jornada_Activa(); if (rt1.Result == OOB.Enumerados.EnumResult.isError) { Helpers.Msg.Error(rt1.Mensaje); return; } if (rt1.Entidad == -1) { var msg = "PROBLEMA AL GRABAR FACTURA" + Environment.NewLine + "DEJA LA FACTURA EN PENDIENTE" + Environment.NewLine + "SAL DEL SISTEMA (POS) Y VUELVE A INTENTAR" + Environment.NewLine + "AL PARECER HABIA OTRA INSTANCIA DEL SISTEMA ABIERTA"; Helpers.Msg.Error(msg); return; } var rt2 = Sistema.MyData2.Operador_Activo(); if (rt2.Result == OOB.Enumerados.EnumResult.isError) { Helpers.Msg.Error(rt2.Mensaje); return; } if (rt1.Entidad == -1) { var msg = "PROBLEMA AL GRABAR FACTURA" + Environment.NewLine + "DEJA LA FACTURA EN PENDIENTE" + Environment.NewLine + "SAL DEL SISTEMA (POS) Y VUELVE A INTENTAR" + Environment.NewLine + "AL PARECER HABIA OTRA INSTANCIA DEL SISTEMA ABIERTA"; Helpers.Msg.Error(msg); return; } var ficha = new OOB.LibVenta.PosOffline.VentaDocumento.Agregar() { //IdJornada =Sistema.MyJornada.Id, //IdOperador=Sistema.MyOperador.Id, IdJornada = rt1.Entidad, IdOperador = rt2.Entidad, Aplica = _aplica, AutoUsuario = _usuario.Auto, ClienteId = _ctrCliente.Ficha.Id, ClienteCiRif = _ctrCliente.Ficha.CiRif, ClienteDirFiscal = _ctrCliente.Ficha.DirFiscal, ClienteNombreRazonSocial = _ctrCliente.Ficha.NombreRazaonSocial, ClienteTelefono = _ctrCliente.Ficha.Telefono, Control = _control, Documento = _correlativo.ToString().Trim().PadLeft(10, '0'), Estacion = Environment.MachineName, FactorCambio = TasaCambio, IsDocumentoActivo = true, MontoBase = _ctrItem.MontoBase, MontoBase_1 = _ctrItem.MontoBaseX("1"), MontoBase_2 = _ctrItem.MontoBaseX("2"), MontoBase_3 = _ctrItem.MontoBaseX("3"), MontoCargo_1 = _cargoGlobalMonto, MontoCostoVenta = _ctrItem.MontoCostoVenta, MontoDescuento_1 = _dsctoGlobalMonto, MontoDescuento_2 = 0.0m, MontoDivisa = _montoDivisa, MontoExento = _ctrItem.MontoExento, MontoImpuesto = _ctrItem.MontoImpuesto, MontoIva_1 = _ctrItem.MontoIvaX("1"), MontoIva_2 = _ctrItem.MontoIvaX("2"), MontoIva_3 = _ctrItem.MontoIvaX("3"), MontoSubTotal = _ctrItem.MontoTotal, MontoSubTotalImpuesto = _ctrItem.MontoImpuesto, MontoSubTotalNeto = _ctrItem.SubTotalNeto, MontoTotal = _montoTotal, MontoUtilidad = _ctrItem.UtilidadNetaMonto, MontoVentaNeta = _ctrItem.MontoVentaNeto, PorcCargo_1 = _cargoGlobalPorct, PorcDescuento_1 = _dsctoGlobalPorct, PorcDescuento_2 = 0.0m, PorcUtilidad = _ctrItem.UtilidadNetaPorct, Renglones = _ctrItem.Renglones, Serie = _serie, SignoDocumento = _signo, TasaIva_1 = _fiscal.Tasa1, TasaIva_2 = _fiscal.Tasa2, TasaIva_3 = _fiscal.Tasa3, TipoDocumento = _tipoDocumento, UsuarioCodigo = _usuario.Codigo, UsuarioDescripcion = _usuario.Descripcion, CodioSucursal = CodigoSucursal, PrefijoSucursal = PrefijoSucursal, AutoDeposito = _deposito.Auto, CodigoDeposito = _deposito.Codigo, DescripcionDeposito = _deposito.Descripcion, AutoVendedor = _vendedor.Auto, CodigoVendedor = _vendedor.Codigo, NombreVendedor = _vendedor.Nombre, AutoCobrador = _cobrador.Auto, CodigoCobrador = _cobrador.Codigo, NombreCobrador = _cobrador.Nombre, AutoTransporte = _transporte.Auto, CodigoTransporte = _transporte.Codigo, NombreTransporte = _transporte.Nombre, MontoRecibido = _montoRecibido, CambioDar = _cambioDar, IsCredito = _isCredito, Tarifa = TarifaPrecio, SaldoPendiente = _saldoPendiente, AutoConceptoMov = _autoConceptoMv, CodigoConceptoMov = _codigoConceptoMv, NombreConceptoMov = _nombreConceptoMv, }; //PARA EL TICKET _ticketFactura.Cliente.Limpiar(); _ticketFactura.Cliente.cirif = _ctrCliente.Ficha.CiRif; _ticketFactura.Cliente.nombre_1 = _ctrCliente.Ficha.NombreRazaonSocial; _ticketFactura.Cliente.dirFiscal_1 = _ctrCliente.Ficha.DirFiscal; _ticketFactura.Cliente.telefono_1 = _ctrCliente.Ficha.Telefono; _ticketFactura.Cliente.condicionpago = _condicionPago; _ticketFactura.Cliente.estacion = Environment.MachineName; _ticketFactura.Cliente.usuario = Sistema.Usuario.Descripcion; var tot = Math.Round(ficha.MontoTotal, 2, MidpointRounding.AwayFromZero); var stot = Math.Round(ficha.MontoSubTotal, 2, MidpointRounding.AwayFromZero); var sbtot = Math.Round(_ctrItem.SubTotal, 2, MidpointRounding.AwayFromZero); _ticketFactura.Documento.Limpiar(); _ticketFactura.Documento.nombre = _documentoNombre; _ticketFactura.Documento.aplicaA = _aplica; _ticketFactura.Documento.numero = ficha.Documento; _ticketFactura.Documento.fecha = DateTime.Now.Date.ToShortDateString(); _ticketFactura.Documento.hora = DateTime.Now.ToShortTimeString(); _ticketFactura.Documento.subtotalNeto = "Bs " + sbtot.ToString("n2"); _ticketFactura.Documento.subtotal = "Bs " + stot.ToString("n2"); _ticketFactura.Documento.total = "Bs " + tot.ToString("n2"); _ticketFactura.Documento.cambio = "Bs " + ficha.CambioDar.ToString("n2"); _ticketFactura.Documento.descuentoMonto = "Bs " + ficha.MontoDescuento_1.ToString("n2"); _ticketFactura.Documento.descuentoPorct = ficha.PorcDescuento_1.ToString("n2").Trim() + "%"; _ticketFactura.Documento.cargoMonto = "Bs " + ficha.MontoCargo_1.ToString("n2"); _ticketFactura.Documento.cargoPorct = ficha.PorcCargo_1.ToString("n2").Trim() + "%"; _ticketFactura.Documento.HayDescuento = ficha.PorcDescuento_1 > 0.0m; _ticketFactura.Documento.HayCargo = ficha.PorcCargo_1 > 0.0m; var fichaItemsEliminar = new List <OOB.LibVenta.PosOffline.VentaDocumento.AgregarItemEliminar>(); var fichaItems = new List <OOB.LibVenta.PosOffline.VentaDocumento.AgregarItem>(); foreach (var rg in _ctrItem.Items) { if (_modoFuncion == Enumerados.EnumModoFuncion.Facturacion) { var nrEliminar = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarItemEliminar() { IdEliminar = rg.Id, }; fichaItemsEliminar.Add(nrEliminar); } var nr = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarItem() { AutoDepartamento = rg.AutoDepartamento, AutoGrupo = rg.AutoGrupo, AutoProducto = rg.AutoId, AutoSubGrupo = rg.AutoSubGrupo, AutoTasa = rg.AutoTasa, Cantidad = rg.Cantidad, CantidadUnd = rg.CantidadUnd, Categoria = rg.Categoria, CodigoPrd = rg.CodigoPrd, CostoCompraUnd = rg.CostoUnd, CostoPromedioUnd = rg.CostoPromUnd, CostoVenta = rg.CostoVenta, Decimales = rg.Decimales, DiasEmpaqueGarantia = rg.DiasEmpaqueGarantia, EmpaqueCodigo = rg.EmpaqueCodigo, EmpaqueContenido = rg.EmpaqueContenido, EmpaqueDescripcion = rg.EmpaqueDescripcion, MontoDscto_1 = 0.0m, MontoDscto_2 = 0.0m, MontoDscto_3 = 0.0m, MontoIva = rg.MontoIva, MontoUtilidad = rg.UtilidadNetaMonto, NombrePrd = rg.NombrePrd, Notas = "", PorcDscto_1 = 0.0m, PorcDscto_2 = 0.0m, PorcDscto_3 = 0.0m, PorctUtilidad = rg.UtilidadNetaPorct, PrecioSugerido = rg.PrecioSugerido, PrecioNeto = rg.PrecioNeto, PrecioItem = rg.PrecioItem, PrecioFinal = rg.PrecioFinalNeto, PrecioUnd = rg.PrecioFinalNeto, TarifaPrecio = rg.TarifaPrecio, TasaIva = rg.TasaIva, Total = rg.Total, TotalNeto = rg.TotalNeto, TotalDescuento = rg.TotalDescuentoItem, EsPesado = rg.EsPesado, TipoIva = rg.TipoIva, CostoCompra = rg.CostoCompra, CostoPromedio = rg.CostoPromedio, }; fichaItems.Add(nr); //PARA EL TICKET var it = new Ticket.DatosDocumento.Item() { cantidad = nr.Cantidad, precio = Math.Round(rg.PrecioFull, 2, MidpointRounding.AwayFromZero), isExento = rg.EsExento, isPesado = nr.EsPesado, descripcion = nr.NombrePrd, importe = Math.Round(rg.Total, 2, MidpointRounding.AwayFromZero), contenido = rg.EmpaqueContenido, empaque = rg.EmpaqueDescripcion, }; _ticketFactura.Documento.Items.Add(it); } ficha.Items = fichaItems; ficha.ItemsEliminar = fichaItemsEliminar; var metodosPago = pago._detalle.Where(w => w.Monto > 0).Select(s => { OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.SinDefinir; OOB.LibVenta.PosOffline.Configuracion.MedioCobro.Medio medio = null; switch (s.Modo) { case Pago.Enumerados.ModoPago.Efectivo: medio = _medioCobro.Efectivo; _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Efectivo; break; case Pago.Enumerados.ModoPago.Divisa: medio = _medioCobro.Divisa; _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Divisa; break; case Pago.Enumerados.ModoPago.Electronico: if (s.Id == 4) { medio = _medioCobro.Otro; _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros; break; } else { medio = _medioCobro.Electronico; _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Electronico; break; } case Pago.Enumerados.ModoPago.Otro: medio = _medioCobro.Otro; _tipoMedioPago = OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros; break; } var nr = new OOB.LibVenta.PosOffline.VentaDocumento.AgregarMetodoPago() { TipoMedioPago = _tipoMedioPago, autoMedioPago = medio.Auto, codigoMedioPago = medio.Codigo, descripcionMedioPago = medio.Descripcion, Importe = s.Importe, MontoRecibido = s.MontoRecibido, Tasa = s.Tasa, Lote = s.Lote, Referencia = s.Referencia, }; return(nr); }).ToList(); ficha.MetodosPago = metodosPago; //PARA EL TICKET foreach (var fmp in metodosPago) { if (fmp.Tasa > 1) { var m = fmp.MontoRecibido * fmp.Tasa; var itP = new Ticket.DatosDocumento.MedioPago() { descripcion = "Efectivo ($" + fmp.MontoRecibido.ToString("N0") + ")", monto = "Bs " + m.ToString("n2"), }; _ticketFactura.Documento.MediosPago.Add(itP); } else { var itP = new Ticket.DatosDocumento.MedioPago() { descripcion = fmp.descripcionMedioPago, monto = "Bs " + fmp.MontoRecibido.ToString("n2"), }; _ticketFactura.Documento.MediosPago.Add(itP); } } var r01 = Sistema.MyData2.VentaDocumento_Agregar(ficha); if (r01.Result == OOB.Enumerados.EnumResult.isError) { Helpers.Msg.Error(r01.Mensaje); return; } switch (ficha.TipoDocumento) { case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.Factura: _series.IncrementaCorrelativoFactura(); break; case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaCredito: _series.IncrementaCorrelativoNtCredito(); break; case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoDocumento.NotaDebito: _series.IncrementaCorrelativoNtDebito(); break; } _documentoProcesado = true; Helpers.Msg.AgregarOk(); _modoFuncion = Enumerados.EnumModoFuncion.Facturacion; _ctrItem.Limpiar(); _ctrCliente.Limpiar(); }
public OOB.ResultadoId VentaDocumento_Agregar(OOB.LibVenta.PosOffline.VentaDocumento.Agregar ficha) { var rt = new OOB.ResultadoId(); var agregarDTO = new DtoLibPosOffLine.VentaDocumento.Agregar() { IdJornada = ficha.IdJornada, IdOperador = ficha.IdOperador, Aplica = ficha.Aplica, AutoUsuario = ficha.AutoUsuario, ClienteId = ficha.ClienteId, ClienteCiRif = ficha.ClienteCiRif, ClienteDirFiscal = ficha.ClienteDirFiscal, ClienteNombreRazonSocial = ficha.ClienteNombreRazonSocial, ClienteTelefono = ficha.ClienteTelefono, Control = ficha.Control, Documento = ficha.Documento, Estacion = ficha.Estacion, EstatusDocumento = ficha.IsDocumentoActivo ? 1 : 0, FactorCambio = ficha.FactorCambio, MontoBase = ficha.MontoBase, MontoBase_1 = ficha.MontoBase_1, MontoBase_2 = ficha.MontoBase_2, MontoBase_3 = ficha.MontoBase_3, MontoCargo_1 = ficha.MontoCargo_1, MontoCostoVenta = ficha.MontoCostoVenta, MontoDescuento_1 = ficha.MontoDescuento_1, MontoDescuento_2 = ficha.MontoDescuento_2, MontoDivisa = ficha.MontoDivisa, MontoExento = ficha.MontoExento, MontoImpuesto = ficha.MontoImpuesto, MontoIva_1 = ficha.MontoIva_1, MontoIva_2 = ficha.MontoIva_2, MontoIva_3 = ficha.MontoIva_3, MontoSubTotal = ficha.MontoSubTotal, MontoSubTotalImpuesto = ficha.MontoSubTotalImpuesto, MontoSubTotalNeto = ficha.MontoSubTotalNeto, MontoTotal = ficha.MontoTotal, MontoUtilidad = ficha.MontoUtilidad, MontoVentaNeta = ficha.MontoVentaNeta, PorcCargo_1 = ficha.PorcCargo_1, PorcDescuento_1 = ficha.PorcDescuento_1, PorcDescuento_2 = ficha.PorcDescuento_2, PorcUtilidad = ficha.PorcUtilidad, Renglones = ficha.Renglones, Serie = ficha.Serie, SignoDocumento = ficha.SignoDocumento, TasaIva_1 = ficha.TasaIva_1, TasaIva_2 = ficha.TasaIva_2, TasaIva_3 = ficha.TasaIva_3, TipoDocumento = (int)ficha.TipoDocumento, UsuarioCodigo = ficha.UsuarioCodigo, UsuarioDescripcion = ficha.UsuarioDescripcion, CodigoSucursal = ficha.CodioSucursal, Prefijo = ficha.PrefijoSucursal, AutoDeposito = ficha.AutoDeposito, CodigoDeposito = ficha.CodigoDeposito, DescripcionDeposito = ficha.DescripcionDeposito, AutoVendedor = ficha.AutoVendedor, CodigoVendedor = ficha.CodigoVendedor, NombreVendedor = ficha.NombreVendedor, AutoCobrador = ficha.AutoCobrador, CodigoCobrador = ficha.CodigoCobrador, NombreCobrador = ficha.NombreCobrador, AutoTransporte = ficha.AutoTransporte, CodigoTransporte = ficha.CodigoTransporte, NombreTransporte = ficha.NombreTransporte, MontoRecibido = ficha.MontoRecibido, CambioDar = ficha.CambioDar, IsCredito = ficha.IsCredito, HoraEmision = DateTime.Now.ToShortTimeString(), Tarifa = ficha.Tarifa, SaldoPendiente = ficha.SaldoPendiente, AutoConceptoMov = ficha.AutoConceptoMov, CodigoConceptoMov = ficha.CodigoConceptoMov, NombreConceptoMov = ficha.NombreConceptoMov, }; var agregarItemDto = ficha.Items.Select(s => { var t = new DtoLibPosOffLine.VentaDocumento.AgregarItem() { AutoDepartamento = s.AutoDepartamento, AutoGrupo = s.AutoGrupo, AutoProducto = s.AutoProducto, AutoSubGrupo = s.AutoSubGrupo, AutoTasa = s.AutoTasa, Cantidad = s.Cantidad, CantidadUnd = s.CantidadUnd, Categoria = s.Categoria, CodigoPrd = s.CodigoPrd, CostoCompraUnd = s.CostoCompraUnd, CostoPromedioUnd = s.CostoPromedioUnd, CostoVenta = s.CostoVenta, Decimales = s.Decimales, DiasEmpaqueGarantia = s.DiasEmpaqueGarantia, EmpaqueCodigo = s.EmpaqueCodigo, EmpaqueContenido = s.EmpaqueContenido, EmpaqueDescripcion = s.EmpaqueDescripcion, MontoDscto_1 = s.MontoDscto_1, MontoDscto_2 = s.MontoDscto_2, MontoDscto_3 = s.MontoDscto_3, MontoIva = s.MontoIva, MontoUtilidad = s.MontoUtilidad, NombrePrd = s.NombrePrd, Notas = s.Notas, PorcDscto_1 = s.PorcDscto_1, PorcDscto_2 = s.PorcDscto_2, PorcDscto_3 = s.PorcDscto_3, PorctUtilidad = s.PorctUtilidad, PrecioFinal = s.PrecioFinal, PrecioItem = s.PrecioItem, PrecioNeto = s.PrecioNeto, PrecioSugerido = s.PrecioSugerido, PrecioUnd = s.PrecioUnd, TarifaPrecio = s.TarifaPrecio, TasaIva = s.TasaIva, Total = s.Total, TotalNeto = s.TotalNeto, TotalDescuento = s.TotalDescuento, EsPesado = s.EsPesado?1:0, TipoIva = s.TipoIva, CostoCompra = s.CostoCompra, CostoPromedio = s.CostoPromedio, }; return(t); }).ToList(); agregarDTO.Items = agregarItemDto; var agregarMetodsPago = ficha.MetodosPago.Select(m => { var _tipoMedioPago = -1; switch (m.TipoMedioPago) { case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Efectivo: _tipoMedioPago = 1; break; case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Divisa: _tipoMedioPago = 2; break; case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Electronico: _tipoMedioPago = 3; break; case OOB.LibVenta.PosOffline.VentaDocumento.Enumerados.EnumTipoMedioPago.Otros: _tipoMedioPago = 4; break; } var nr = new DtoLibPosOffLine.VentaDocumento.AgregarMetodoPago() { tipoMedioPago = _tipoMedioPago, autoMedioPago = m.autoMedioPago, codigoMedioPago = m.codigoMedioPago, descripcionMedioPago = m.descripcionMedioPago, Importe = m.Importe, MontoRecibido = m.MontoRecibido, Tasa = m.Tasa, Lote = m.Lote, Referencia = m.Referencia, }; return(nr); }).ToList(); agregarDTO.MetodosPago = agregarMetodsPago; var agregarItemsEliminarDto = ficha.ItemsEliminar.Select(s => { var nr = new DtoLibPosOffLine.VentaDocumento.AgregarItemLimpiar() { Id = s.IdEliminar, }; return(nr); }).ToList(); agregarDTO.ItemsLimpiar = agregarItemsEliminarDto; var r01 = MyData.VentaDocumento_Agregar(agregarDTO); if (r01.Result == DtoLib.Enumerados.EnumResult.isError) { rt.Mensaje = r01.Mensaje; rt.Result = OOB.Enumerados.EnumResult.isError; return(rt); } rt.Id = r01.Id; return(rt); }