Exemplo n.º 1
0
        public List <NotaCreditoElectronicaLineaDetalle> DetalleNotaCredito(ComprobanteElectronicoCRI value)
        {
            List <NotaCreditoElectronicaLineaDetalle> detalleServicio = new List <NotaCreditoElectronicaLineaDetalle>();

            for (int i = 0; i <= value.ListaComprobanteElectronicoCRIDetalle.Count - 1; i++)
            {
                if (i > 999)
                {
                    return(detalleServicio);
                }
                NotaCreditoElectronicaLineaDetalle linea = new NotaCreditoElectronicaLineaDetalle
                {
                    NumeroLinea = value.ListaComprobanteElectronicoCRIDetalle[i].NumeroLinea.ToString(),
                    Codigo      = new CodigoTypeNC[]
                    {
                        new CodigoTypeNC
                        {
                            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 = ImpuestoNotaCredito(value, value.ListaComprobanteElectronicoCRIDetalle[i].NumeroLinea - 1).ToArray(),

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

                detalleServicio.Add(linea);
            }

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

            foreach (Factura_Detalle q in items)
            {
                NotaCreditoElectronicaLineaDetalle fd = new NotaCreditoElectronicaLineaDetalle()
                {
                    Cantidad        = q.Cantidad,
                    CodigoComercial = new NotaCreditoElectronica_V4_3.CodigoType[] {
                        new NotaCreditoElectronica_V4_3.CodigoType()
                        {
                            Codigo = q.Codigo,
                            Tipo   = NotaCreditoElectronica_V4_3.CodigoTypeTipo.Item01
                        }
                    },
                    Detalle         = q.ProductoServicio,
                    NumeroLinea     = NumeroLinea.ToString(),
                    PrecioUnitario  = q.PrecioUnitario,
                    SubTotal        = q.SubTotal,
                    UnidadMedida    = EnumUtils.SetTypeString <NotaCreditoElectronica_V4_3.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 <NotaCreditoElectronica_V4_3.ImpuestoType> impuestoD = new List <NotaCreditoElectronica_V4_3.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
                            {
                                impuestoD.Add(new NotaCreditoElectronica_V4_3.ImpuestoType()
                                {
                                    Codigo      = EnumUtils.SetTypeString <NotaCreditoElectronica_V4_3.ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto       = impuesto.Impuesto_Monto,
                                    Tarifa      = impuesto.Impuesto_Tarifa,
                                    Exoneracion = new NotaCreditoElectronica_V4_3.ExoneracionType()
                                    {
                                        FechaEmision = impuesto.Exoneracion_FechaEmision.Value,
                                        //MontoImpuesto = impuesto.Exoneracion_MontoImpuesto.Value,
                                        NombreInstitucion     = impuesto.Exoneracion_NombreInstitucion,
                                        NumeroDocumento       = impuesto.Exoneracion_NumeroDocumento,
                                        PorcentajeExoneracion = impuesto.Exoneracion_PorcentajeCompra,
                                        TipoDocumento         = EnumUtils.SetTypeString <NotaCreditoElectronica_V4_3.ExoneracionTypeTipoDocumento>(impuesto.Exoneracion_TipoDocumento)
                                    },
                                });
                            }
                            else if (impuesto.Impuesto_Tarifa != 0) //exento linea total todo a 0
                            {
                                impuestoD.Add(new NotaCreditoElectronica_V4_3.ImpuestoType()
                                {
                                    Codigo = EnumUtils.SetTypeString <NotaCreditoElectronica_V4_3.ImpuestoTypeCodigo>(impuesto.Impuesto_Codigo),
                                    Monto  = 0,
                                    Tarifa = 0,
                                });
                            }
                        }
                        else//gravado
                        {
                            impuestoD.Add(new NotaCreditoElectronica_V4_3.ImpuestoType()
                            {
                                Codigo = EnumUtils.SetTypeString <NotaCreditoElectronica_V4_3.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);
        }