private Factura_Resolucion_Detalle CargarLinea(FacturaElectronicaLineaDetalle linea)
        {
            try
            {
                Factura_Resolucion_Detalle lineaDB = new Factura_Resolucion_Detalle();
                lineaDB.Cantidad = Convert.ToInt32(linea.Cantidad);
                if (lineaDB.Codigo != null && linea.Codigo.Length > 0)
                {
                    lineaDB.Codigo = linea.CodigoComercial[0].Codigo;
                }

                if (linea.Descuento != null && linea.Descuento.Length > 0)
                {
                    lineaDB.Monto_Descuento      = linea.Descuento.Sum(q => q.MontoDescuento);
                    lineaDB.Naturaleza_Descuento = string.Join(", ", linea.Descuento.Select(q => q.NaturalezaDescuento));
                }

                lineaDB.Monto_Total       = linea.MontoTotal;
                lineaDB.Monto_Total_Linea = linea.MontoTotalLinea;
                lineaDB.PrecioUnitario    = linea.PrecioUnitario;
                lineaDB.SubTotal          = linea.SubTotal;
                lineaDB.ProductoServicio  = linea.Detalle;
                lineaDB.Gravado           = false;

                if (linea.Impuesto != null && linea.Impuesto.Length > 0)
                {
                    decimal MontoImpuesto = 0;
                    List <Factura_Resolucion_Detalle_Impuesto> impuestos = new List <Factura_Resolucion_Detalle_Impuesto>();
                    foreach (ImpuestoType im in linea.Impuesto)
                    {
                        MontoImpuesto += im.Monto;
                        impuestos.Add(new Factura_Resolucion_Detalle_Impuesto()
                        {
                            Impuesto_Codigo = im.Codigo.GetXmlValue(),
                            Impuesto_Monto  = im.Monto,
                            Impuesto_Tarifa = im.Tarifa
                        });
                    }

                    if (impuestos.Count > 0)
                    {
                        lineaDB.Gravado        = true;
                        lineaDB.Impuesto_Monto = MontoImpuesto;
                        lineaDB.Factura_Resolucion_Detalle_Impuesto = impuestos;
                    }
                }

                return(lineaDB);
            }
            catch (Exception ex)
            {
                this.LogError(ex);
                return(null);
            }
        }
        private List <FacturaElectronicaLineaDetalle> DetalleFactura(ComprobanteElectronicoCRI value)
        {
            List <FacturaElectronicaLineaDetalle> detalleServicio = new List <FacturaElectronicaLineaDetalle>();

            for (int i = 0; i <= value.ListaComprobanteElectronicoCRIDetalle.Count - 1; i++)
            {
                if (i > 999)
                {
                    return(detalleServicio);
                }
                FacturaElectronicaLineaDetalle linea = new FacturaElectronicaLineaDetalle
                {
                    NumeroLinea = value.ListaComprobanteElectronicoCRIDetalle[i].NumeroLinea.ToString(),
                    Codigo      = new CodigoType[]
                    {
                        new CodigoType
                        {
                            Tipo   = (CodigoTypeTipo)Enum.Parse(typeof(CodigoTypeTipo), value.ListaComprobanteElectronicoCRIDetalle[i].TipoCodigo),
                            Codigo = value.ListaComprobanteElectronicoCRIDetalle[i].Codigo
                        }
                    },

                    Cantidad              = value.ListaComprobanteElectronicoCRIDetalle[i].Cantidad.ToString(EngineData.decimalFormat3, CultureInfo.InvariantCulture),// 13 enteros 3 decimales
                    UnidadMedida          = (UnidadMedidaType)Enum.Parse(typeof(UnidadMedidaType), value.ListaComprobanteElectronicoCRIDetalle[i].UnidadMedida),
                    UnidadMedidaComercial = value.ListaComprobanteElectronicoCRIDetalle[i].UnidadMedidaComercial,
                    Detalle                 = value.ListaComprobanteElectronicoCRIDetalle[i].Detalle,
                    PrecioUnitario          = value.ListaComprobanteElectronicoCRIDetalle[i].PrecioUnitario.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //13enteros 5 decimales
                    MontoTotal              = value.ListaComprobanteElectronicoCRIDetalle[i].MontoTotal.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),     //cantidad * precioUnitario 13enteros 5 decimales
                    MontoDescuento          = value.ListaComprobanteElectronicoCRIDetalle[i].MontoDescuento.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture), //13enteros 5 decimales
                    MontoDescuentoSpecified = EngineDocumento.InsertFieldBoolCantidad(value.ListaComprobanteElectronicoCRIDetalle[i].MontoDescuento),
                    NaturalezaDescuento     = value.ListaComprobanteElectronicoCRIDetalle[i].NaturalezaDescuento,
                    SubTotal                = value.ListaComprobanteElectronicoCRIDetalle[i].SubTotal.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture),//montoTotal - montoDescuento

                    Impuesto = ImpuestoFactura(value, value.ListaComprobanteElectronicoCRIDetalle[i].NumeroLinea - 1).ToArray(),

                    MontoTotalLinea = value.ListaComprobanteElectronicoCRIDetalle[i].MontoTotalLinea.ToString(EngineData.decimalFormat5, CultureInfo.InvariantCulture)
                };

                detalleServicio.Add(linea);
            }

            return(detalleServicio);
        }
Ejemplo n.º 3
0
        private List <FacturaElectronicaLineaDetalle> GetDetalleFromFacturaDB(ICollection <Factura_Detalle> items)
        {
            List <FacturaElectronicaLineaDetalle> lst = new List <FacturaElectronicaLineaDetalle>();
            int NumeroLinea = 1;

            foreach (Factura_Detalle q in items)
            {
                FacturaElectronicaLineaDetalle fd = new FacturaElectronicaLineaDetalle()
                {
                    Cantidad        = q.Cantidad,
                    CodigoComercial = new CodigoType[] {
                        new CodigoType()
                        {
                            Codigo = q.Codigo,
                            Tipo   = CodigoTypeTipo.Item01
                        }
                    },
                    Detalle         = q.ProductoServicio,
                    NumeroLinea     = NumeroLinea.ToString(),
                    PrecioUnitario  = q.PrecioUnitario,
                    SubTotal        = q.SubTotal,
                    UnidadMedida    = EnumUtils.SetTypeString <UnidadMedidaType>(q.Unidad_Medida),
                    MontoTotal      = q.Monto_Total,
                    MontoTotalLinea = q.Monto_Total_Linea,
                };

                if (q.Monto_Descuento.HasValue && q.Monto_Descuento.Value != 0)
                {
                    fd.Descuento = new DescuentoType[] {
                        new DescuentoType()
                        {
                            MontoDescuento      = q.Monto_Descuento.Value,
                            NaturalezaDescuento = string.IsNullOrEmpty(q.Naturaleza_Descuento) ? "No se indica" : q.Naturaleza_Descuento
                        }
                    };
                }



                if (q.Factura_Detalle_Impuesto != null && q.Factura_Detalle_Impuesto.Count > 0)
                {
                    List <ImpuestoType> impuestoD = new List <ImpuestoType>();
                    foreach (Factura_Detalle_Impuesto impuesto in q.Factura_Detalle_Impuesto)
                    {
                        if (impuesto.Exento)
                        {
                            //exento parcial
                            if (!string.IsNullOrWhiteSpace(impuesto.Exoneracion_PorcentajeCompra) && impuesto.Exoneracion_MontoImpuesto.HasValue)//exento parcial
                            {
                                ImpuestoType impuestoHacienda = new ImpuestoType()
                                {
                                    Codigo          = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto           = impuesto.Impuesto_Monto,
                                    TarifaSpecified = true,
                                    Tarifa          = impuesto.Impuesto_Tarifa,
                                    Exoneracion     = new ExoneracionType()
                                    {
                                        FechaEmision          = impuesto.Exoneracion_FechaEmision.Value,
                                        MontoExoneracion      = impuesto.Exoneracion_MontoImpuesto.Value,
                                        NombreInstitucion     = impuesto.Exoneracion_NombreInstitucion,
                                        NumeroDocumento       = impuesto.Exoneracion_NumeroDocumento,
                                        PorcentajeExoneracion = impuesto.Exoneracion_PorcentajeCompra,
                                        TipoDocumento         = EnumUtils.SetTypeString <ExoneracionTypeTipoDocumento>(impuesto.Exoneracion_TipoDocumento)
                                    },
                                };

                                if (!string.IsNullOrEmpty(impuesto.CodigoTarifa))
                                {
                                    impuestoHacienda.CodigoTarifa          = EnumUtils.SetTypeString <ImpuestoTypeCodigoTarifa>(impuesto.CodigoTarifa);
                                    impuestoHacienda.CodigoTarifaSpecified = true;
                                }
                                else
                                {
                                    impuestoHacienda.CodigoTarifaSpecified = false;
                                }

                                if (impuesto.FactorIVA.HasValue && impuesto.FactorIVA > 0)
                                {
                                    impuestoHacienda.FactorIVA = impuesto.FactorIVA.Value;
                                }


                                impuestoD.Add(impuestoHacienda);
                            }
                            else if (impuesto.Impuesto_Tarifa != 0) //exento linea total todo a 0
                            {
                                impuestoD.Add(new ImpuestoType()
                                {
                                    Codigo = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto  = 0,
                                    Tarifa = 0,
                                });
                            }
                        }
                        else//gravado
                        {
                            impuestoD.Add(new ImpuestoType()
                            {
                                Codigo = EnumUtils.SetTypeString <ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                Monto  = impuesto.Impuesto_Monto,
                                Tarifa = impuesto.Impuesto_Tarifa,
                            });
                        }
                    }

                    if (impuestoD.Count != 0)
                    {
                        fd.Impuesto = impuestoD.ToArray();
                    }
                }


                lst.Add(fd);
                NumeroLinea++;
            }

            return(lst);
        }