private void SetearEnItemsEspecificacionesObligatoriasSegunComprobante( FeCabecera cabFe, ComprobanteType comprobante ) { foreach ( ItemType item in comprobante.arrayItems ) { item.importeIVASpecified = (cabFe.TipoComprobante >= 1 && cabFe.TipoComprobante <= 3); } }
public CAEDetalleRespuesta ConvertirDetalle( ComprobanteType origen ) { CAEDetalleRespuesta destino = new CAEDetalleRespuesta(); destino.Cae = origen.codigoAutorizacion.ToString(); destino.CaeFechaVencimiento = origen.fechaVencimiento.ToString( "yyyyMMdd" ); destino.ComprobanteDesde = origen.numeroComprobante; destino.ComprobanteHasta = origen.numeroComprobante; destino.ComprobanteFecha = origen.fechaEmision.ToString( "yyyyMMdd" ); destino.Concepto = origen.codigoConcepto; destino.DocumentoNumero = origen.numeroDocumento; destino.Resultado = origen.codigoTipoAutorizacion.ToString(); // ver si es este valor destino.TipoDocumento = origen.codigoTipoDocumento; destino.ImporteTotal = (double) origen.importeTotal; destino.ImporteExento = (double) origen.importeExento; destino.ImporteIVA = (double) origen.arraySubtotalesIVA.Sum( x => x.importe ); destino.ImporteNeto = (double) origen.importeGravado; //destino.ImporteTotalConceptos = origen.impo; destino.ImporteTributos = (double) origen.importeOtrosTributos; destino.Observaciones = new List<Observacion>(); if ( !string.IsNullOrEmpty( origen.observaciones ) ) { destino.Observaciones.Add( new Observacion() { Mensaje = origen.observaciones } ); } return destino; }
public void GenerarBackupArchivoSerializado(SerializadorRequest serializador, ComprobanteType cabecera) { String ruta; ClasificacionDeComprobantes comprobantes = new ClasificacionDeComprobantes(); ruta = Directory.GetCurrentDirectory() + "\\Log\\FacturacionElectronica\\" + comprobantes.ObtenerTipoYLetraDeComprobante(cabecera.codigoTipoComprobante) + "_" + cabecera.numeroPuntoVenta.ToString().PadLeft(4, '0') + "_" + cabecera.numeroComprobante.ToString().PadLeft(8, '0') +"_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xml"; serializador.SerializadorConRuta<ComprobanteType>(cabecera, ruta); }
public static ComprobanteType GetComprobanteType(Comprobante comprobante) { var req = new ComprobanteType( ); if (comprobante.Tipo != null) { req.codigoTipoComprobante = (( ComprobanteTipo )comprobante.Tipo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)).Codigo; } if (comprobante.ConceptosIncluidos == ConceptosIncluidos.Otro) { throw new UserFriendlyException("La autorización electrónica por AFIP solo permite comprobantes de Productos, Servicios, o Prod. y Serv."); } req.codigoConcepto = ( short )comprobante.ConceptosIncluidos; req.numeroPuntoVenta = ( short )comprobante.Sector; req.numeroComprobante = comprobante.Numero; req.fechaEmision = comprobante.Fecha; req.fechaServicioDesde = comprobante.InicioPrestacion; req.fechaServicioHasta = comprobante.FinPrestacion; if (comprobante.Vencimiento != null) { req.fechaVencimientoPago = comprobante.Vencimiento.Value; } req.cotizacionMoneda = comprobante.Cambio; if (comprobante.Especie != null) { req.codigoMoneda = (( Moneda )comprobante.Especie.Moneda.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)).Codigo; } if (comprobante.IdentificacionTipo != null) { req.codigoTipoDocumento = (( IdentificacionTipo )comprobante.IdentificacionTipo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)).Codigo; req.codigoTipoDocumentoSpecified = true; } if (!string.IsNullOrEmpty(comprobante.IdentificacionNro)) { req.numeroDocumento = Convert.ToInt64(comprobante.IdentificacionNro); req.numeroDocumentoSpecified = true; } decimal impGrav = 0, impIVA = 0, impTrib = 0, impNoGrav = 0, impExento = 0; var arraySubtotalesIVA = new List <SubtotalIVAType>( ); var arrayOtrosTributos = new List <OtroTributoType>( ); var arrayItems = new List <ItemType>( ); foreach (var item in comprobante.Items) { if (item.Concepto.Clase != ConceptoClase.Impuesto) { var itemType = new ItemType( ); itemType.descripcion = item.Detalle; itemType.cantidad = item.Cantidad; itemType.cantidadSpecified = true; if (comprobante.Tipo.DiscriminaImpuestos) { itemType.precioUnitario = item.PrecioUnitario; itemType.importeBonificacion = item.ImporteDescuento; itemType.importeIVA = Math.Round(item.ImporteImpuestos, 2); itemType.importeIVASpecified = true; } else { itemType.precioUnitario = item.PrecioUnitarioConImpuesto; itemType.importeBonificacion = item.ImporteDescuentoConImpuesto; } itemType.precioUnitarioSpecified = true; itemType.importeBonificacionSpecified = true; itemType.importeItem = Math.Round(item.ImporteTotalConImpuesto, 2); itemType.codigoCondicionIVA = Convert.ToInt16(item.Concepto.AlicuotaImpuesto.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)); if (item.UnidadMedida == null) { throw new UserFriendlyException("Debe indicar unidad de medida para todos los items."); } itemType.codigoUnidadMedida = ( short )item.UnidadMedida.GetMemberValue(AFIPModule.PropertyNameCodigoAfip); itemType.unidadesMtx = ( int )item.UnidadMedida.UnidadesFraccionamiento; itemType.unidadesMtxSpecified = true; if (item.Articulo != null) { itemType.codigo = item.Articulo.Codigo; itemType.codigoMtx = item.Articulo.CodigoLegal; } if (string.IsNullOrEmpty(itemType.codigoMtx)) { itemType.codigoMtx = item.Concepto.CodigoLegal; } arrayItems.Add(itemType); } switch (( ConceptosGrupos )item.Concepto.Grupo) { case ConceptosGrupos.NoGrav: impNoGrav += item.ImporteTotal; break; case ConceptosGrupos.Exento: impExento += item.ImporteTotal; break; case ConceptosGrupos.Grav0: case ConceptosGrupos.Grav105: case ConceptosGrupos.Grav21: case ConceptosGrupos.Grav27: impGrav += item.ImporteTotal; break; case ConceptosGrupos.IVA0: case ConceptosGrupos.IVA105: case ConceptosGrupos.IVA21: case ConceptosGrupos.IVA27: impIVA += item.ImporteTotal; arraySubtotalesIVA.Add(new SubtotalIVAType { codigo = Convert.ToInt16(item.Concepto.Grupo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)), importe = Math.Round(item.ImporteTotal, 2) }); break; default: if (!string.IsNullOrWhiteSpace(Convert.ToString(item.Concepto.Grupo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)))) { impTrib += item.ImporteTotal; arrayOtrosTributos.Add(new OtroTributoType { baseImponible = item.BaseImponible, codigo = Convert.ToInt16(item.Concepto.Grupo.GetMemberValue(AFIPModule.PropertyNameCodigoAfip)), importe = Math.Round(item.ImporteTotal, 2) }); } break; } } req.arrayItems = arrayItems.Count > 0 ? arrayItems.ToArray( ) : null; req.arraySubtotalesIVA = arraySubtotalesIVA.Count > 0 ? arraySubtotalesIVA.ToArray( ) : null; req.arrayOtrosTributos = arrayOtrosTributos.Count > 0 ? arrayOtrosTributos.ToArray( ) : null; req.importeGravado = Math.Round(impGrav, 2); req.importeGravadoSpecified = true; req.importeNoGravado = Math.Round(impNoGrav, 2); req.importeNoGravadoSpecified = true; req.importeExento = Math.Round(impExento, 2); req.importeExentoSpecified = true; req.importeSubtotal = req.importeGravado + req.importeNoGravado + req.importeExento; req.importeOtrosTributos = Math.Round(impTrib, 2); req.importeOtrosTributosSpecified = arrayOtrosTributos.Count > 0; req.importeTotal = req.importeSubtotal + req.importeOtrosTributos + Math.Round(impIVA, 2); return(req); }