private void CargarComprobantesYaAutorizados(FEAuthRequest feAuthRequest, FECAERequest feCAERequest) { // Agregar comprobantes que fueron autorizados pero que no fueron cargados // por problemas en la comunicacion (devolucion de datos por parte de la AFIP) FERecuperaLastCbteResponse ultimoCbteAutorizadoAfip = this.ObtenerUltimoComprobanteAutorizado(feAuthRequest, feCAERequest); ComprobanteDto ultimoCbteCargado = this.ObtenerUltimoComprobanteCargado(feCAERequest); if (ultimoCbteCargado == null || ultimoCbteCargado.CbteHasta < ultimoCbteAutorizadoAfip.CbteNro) { // Cargarlo en la base los comprobantes faltantes long cbteNro = ultimoCbteCargado != null ? (long)ultimoCbteCargado.CbteHasta + 1 : 1; ComprobanteDto cbteDto = null; while (cbteNro <= ultimoCbteAutorizadoAfip.CbteNro) { FECompConsResponse cbteAfip = this.ObtenerComprobanteAfip(feAuthRequest, feCAERequest, cbteNro).ResultGet; if (cbteAfip == null) { break; } if (cbteAfip.EmisionTipo == "CAE") { cbteDto = new ComprobanteDto(); cbteDto.CAE = cbteAfip.CodAutorizacion; cbteDto.CAEFechaVencimiento = DateTimeHelper.ConvertyyyyMMddToDate(cbteAfip.FchVto); cbteDto.CbteDesde = cbteAfip.CbteDesde; cbteDto.CbteHasta = cbteAfip.CbteHasta; cbteDto.CbteFecha = DateTimeHelper.ConvertyyyyMMddToDate(cbteAfip.CbteFch); cbteDto.PtoVta = cbteAfip.PtoVta; cbteDto.TipoComprobanteId = cbteAfip.CbteTipo; TipoComprobanteDto tipoCbteDto = this.comprobanteSvc.ObtenerTipoComprobantePorCodigoAfip(cbteDto.TipoComprobanteId); if (tipoCbteDto != null) { cbteDto.TipoComprobanteId = tipoCbteDto.Id; } if (cbteAfip.DocTipo == 80) // CUIT { ClienteDto clienteDto = this.clienteSvc.ObtenerClientePorCuit(cbteAfip.DocNro); if (clienteDto != null) { cbteDto.ClienteId = clienteDto.Id; } } // #TODO: borrar //EstadoComprobanteDto estadoDto = this.comprobanteSvc.ObtenerEstado(CodigoEstadoCbte.NoVisualizado); //if (estadoDto != null) //{ // cbteDto.EstadoId = estadoDto.Id; //} this.comprobanteSvc.CrearComprobante(cbteDto); cbteNro = (long)cbteDto.CbteHasta + 1; } else { break; } } } }
private string RemoverComprobantesAutorizados(FEAuthRequest feAuthRequest, FECAERequest feCAERequest) { StringBuilder comprobanteAutorizados = new StringBuilder(); // Remover comprobantes que ya tienen CAE if (feCAERequest.FeDetReq.Length > 0) { FERecuperaLastCbteResponse ultimoCbteAutorizadoAfip = this.ObtenerUltimoComprobanteAutorizado(feAuthRequest, feCAERequest); List <FECAEDetRequest> feDetReqList = new List <FECAEDetRequest>(); TipoComprobanteDto tipoCbteDto = this.comprobanteSvc.ObtenerTipoComprobantePorCodigoAfip(feCAERequest.FeCabReq.CbteTipo); foreach (var cbte in feCAERequest.FeDetReq) { if (ultimoCbteAutorizadoAfip != null && cbte.CbteDesde <= ultimoCbteAutorizadoAfip.CbteNro) { // En el archivo hay comprobantes ya autorizados // se debe remover del pedido y reportar la advertencia comprobanteAutorizados.AppendFormat("ADVERTENCIA: {0} Pto Venta: {1} Nro Desde: {2} Hasta: {3} ya ha sido autorizado", tipoCbteDto.Descripcion , feCAERequest.FeCabReq.PtoVta , cbte.CbteDesde , cbte.CbteHasta); } else { feDetReqList.Add(cbte); } } feCAERequest.FeDetReq = feDetReqList.ToArray(); } return(comprobanteAutorizados.ToString()); }
private static TipoComprobanteDto ToTipoComprobanteDto(TipoComprobante tipoComprobante) { if (tipoComprobante == null) { return(null); } TipoComprobanteDto dto = new TipoComprobanteDto(); dto.Id = tipoComprobante.Id; dto.Descripcion = tipoComprobante.Descripcion; dto.CodigoAfip = tipoComprobante.CodigoAfip.HasValue ? tipoComprobante.CodigoAfip.Value : (int?)null; dto.Codigo = tipoComprobante.Codigo; return(dto); }
public CorridaAutorizacionDto ProcesarCorrida(CorridaAutorizacionDto corridaDto, FECAEResponse feCAEResponse) { using (var ctx = new FacturaElectronicaEntities()) { CorridaAutorizacion corrida = ctx.CorridaAutorizacions.Where(c => c.Id == corridaDto.Id).First(); // Procesar Cabecera DetalleCabecera cabecera = new DetalleCabecera(); FECabResponse feCabResp = feCAEResponse.FeCabResp; cabecera.CantReg = feCabResp.CantReg; cabecera.CUIT = feCabResp.Cuit; cabecera.CbteTipo = feCabResp.CbteTipo; cabecera.FchProceso = DateTimeHelper.ConvertyyyyMMddhhmmssToDate(feCabResp.FchProceso); cabecera.Resultado = feCabResp.Resultado; cabecera.PtoVta = feCabResp.PtoVta; corrida.DetalleCabeceras.Add(cabecera); TipoComprobanteDto tipoCbteDto = cbteSvc.ObtenerTipoComprobantePorCodigoAfip(cabecera.CbteTipo); int tipoCbteId; if (tipoCbteDto != null) { tipoCbteId = tipoCbteDto.Id; } if (feCAEResponse.FeDetResp != null && feCAEResponse.FeDetResp.Count() > 0) { // Procesar Comprobantes DetalleComprobante detalleCbte = null; ObservacionComprobante observacionesCbte = null; foreach (FECAEDetResponse cbte in feCAEResponse.FeDetResp) { detalleCbte = new DetalleComprobante(); detalleCbte.Concepto = cbte.Concepto; detalleCbte.DocTipo = cbte.DocTipo; detalleCbte.DocNro = cbte.DocNro; detalleCbte.CbteDesde = cbte.CbteDesde; detalleCbte.CbteHasta = cbte.CbteHasta; detalleCbte.CbteFch = DateTimeHelper.ConvertyyyyMMddToDate(cbte.CbteFch); detalleCbte.Resultado = cbte.Resultado; if (cbte.Resultado == ResultadoCbte.Aprobado) { detalleCbte.CAE = cbte.CAE; detalleCbte.CAEFchVto = DateTimeHelper.ConvertyyyyMMddToDate(cbte.CAEFchVto); // Si fue aprobado agrego una entidad Comprobante Comprobante comprobante = new Comprobante(); comprobante.CAE = detalleCbte.CAE; comprobante.CAEFechaVencimiento = detalleCbte.CAEFchVto; comprobante.CbteDesde = detalleCbte.CbteDesde; comprobante.CbteHasta = detalleCbte.CbteHasta; comprobante.CbteFecha = detalleCbte.CbteFch; comprobante.PtoVta = cabecera.PtoVta; comprobante.FechaDeCarga = DateTime.Now; comprobante.TipoComprobante = ctx.TipoComprobantes.Where(tc => tc.CodigoAfip == cabecera.CbteTipo).FirstOrDefault(); if (detalleCbte.DocTipo == 80) // CUIT { ClienteDto clienteDto = clienteSvc.ObtenerClientePorCuit(detalleCbte.DocNro); if (clienteDto != null) { comprobante.ClienteId = clienteDto.Id; } } // #TODO: borrar //EstadoComprobanteDto estadoDto = this.cbteSvc.ObtenerEstado(CodigoEstadoCbte.NoVisualizado); //if (estadoDto != null) //{ // comprobante.EstadoId = estadoDto.Id; //} detalleCbte.Comprobantes.Add(comprobante); } else { if (cbte.Observaciones != null && cbte.Observaciones.Count() > 0) { foreach (Obs obs in cbte.Observaciones) { observacionesCbte = new ObservacionComprobante(); observacionesCbte.Code = obs.Code; observacionesCbte.Msg = obs.Msg; detalleCbte.ObservacionComprobantes.Add(observacionesCbte); } } } corrida.DetalleComprobantes.Add(detalleCbte); } } if (feCAEResponse.Events != null && feCAEResponse.Events.Count() > 0) { // Procesar Eventos DetalleEvento detalleEvento = null; foreach (Evt evento in feCAEResponse.Events) { detalleEvento = new DetalleEvento(); detalleEvento.Code = evento.Code; detalleEvento.Msg = evento.Msg; corrida.DetalleEventos.Add(detalleEvento); } } if (feCAEResponse.Errors != null && feCAEResponse.Errors.Count() > 0) { // Procesar Errores DetalleError detalleError = null; foreach (Err error in feCAEResponse.Errors) { detalleError = new DetalleError(); detalleError.Code = error.Code; detalleError.Msg = error.Msg; corrida.DetalleErrores.Add(detalleError); } } corrida.Procesada = true; ctx.SaveChanges(); return(ToCorridaDto(corrida, ctx.TipoDocumentoes.ToList(), ctx.TipoComprobantes.ToList(), ctx.TipoConceptoes.ToList())); } }
public CorridaAutorizacionDto ProcesarCorridaWsFeX(CorridaAutorizacionDto corridaDto, FEXResponseAuthorize feXCAEResponse, ClsFEXRequest feXCAERequest) { using (var ctx = new FacturaElectronicaEntities()) { CorridaAutorizacion corrida = ctx.CorridaAutorizacions.Where(c => c.Id == corridaDto.Id).First(); // Procesar Cabecera DetalleCabecera cabecera = new DetalleCabecera(); ClsFEXOutAuthorize feCabResp = feXCAEResponse.FEXResultAuth; if (feCabResp != null) { cabecera.CantReg = 1; // ByAd: revisar cabecera.CUIT = feCabResp.Cuit; cabecera.CbteTipo = feCabResp.Cbte_tipo; cabecera.FchProceso = DateTime.Now; // ByAd: revisar cabecera.Resultado = feCabResp.Resultado; cabecera.PtoVta = feCabResp.Punto_vta; corrida.DetalleCabeceras.Add(cabecera); TipoComprobanteDto tipoCbteDto = cbteSvc.ObtenerTipoComprobantePorCodigoAfip(cabecera.CbteTipo); int tipoCbteId; if (tipoCbteDto != null) { tipoCbteId = tipoCbteDto.Id; } // Procesar Comprobantes DetalleComprobante detalleCbte = null; ObservacionComprobante observacionesCbte = null; detalleCbte = new DetalleComprobante(); detalleCbte.Concepto = 1; // ByAd revisar: aca es prdoucto, servicios o ambos detalleCbte.DocTipo = 80; detalleCbte.DocNro = feCabResp.Cuit; detalleCbte.CbteDesde = feCabResp.Cbte_nro; detalleCbte.CbteHasta = feCabResp.Cbte_nro; detalleCbte.CbteFch = DateTimeHelper.ConvertyyyyMMddToDate(feCabResp.Fch_cbte); detalleCbte.Resultado = feCabResp.Resultado; if (feCabResp.Resultado == ResultadoCbte.Aprobado) { detalleCbte.CAE = feCabResp.Cae; detalleCbte.CAEFchVto = DateTimeHelper.ConvertyyyyMMddToDate(feCabResp.Fch_venc_Cae); // Si fue aprobado agrego una entidad Comprobante Comprobante comprobante = new Comprobante(); comprobante.CAE = detalleCbte.CAE; comprobante.CAEFechaVencimiento = detalleCbte.CAEFchVto; comprobante.CbteDesde = detalleCbte.CbteDesde; comprobante.CbteHasta = detalleCbte.CbteHasta; comprobante.CbteFecha = detalleCbte.CbteFch; comprobante.PtoVta = cabecera.PtoVta; comprobante.FechaDeCarga = DateTime.Now; comprobante.TipoComprobante = ctx.TipoComprobantes.Where(tc => tc.CodigoAfip == cabecera.CbteTipo).FirstOrDefault(); if (detalleCbte.DocTipo == 80) // CUIT { ClienteDto clienteDto = clienteSvc.ObtenerClientePorCuit(detalleCbte.DocNro); if (clienteDto != null) { comprobante.ClienteId = clienteDto.Id; } } // #TODO: borrar //EstadoComprobanteDto estadoDto = this.cbteSvc.ObtenerEstado(CodigoEstadoCbte.NoVisualizado); //if (estadoDto != null) //{ // comprobante.EstadoId = estadoDto.Id; //} detalleCbte.Comprobantes.Add(comprobante); } else { if (!String.IsNullOrEmpty(feCabResp.Motivos_Obs)) { observacionesCbte = new ObservacionComprobante(); observacionesCbte.Code = 1; // ByAd: hardcodeado, ya que este tipo no recibe observacionesCbte.Msg = feCabResp.Motivos_Obs; detalleCbte.ObservacionComprobantes.Add(observacionesCbte); } } corrida.DetalleComprobantes.Add(detalleCbte); } if (feXCAEResponse.FEXEvents != null && !String.IsNullOrEmpty(feXCAEResponse.FEXEvents.EventMsg)) { // Procesar Eventos DetalleEvento detalleEvento = null; detalleEvento = new DetalleEvento(); detalleEvento.Code = feXCAEResponse.FEXEvents.EventCode; detalleEvento.Msg = feXCAEResponse.FEXEvents.EventMsg; corrida.DetalleEventos.Add(detalleEvento); } if (feXCAEResponse.FEXErr != null && !String.IsNullOrEmpty(feXCAEResponse.FEXErr.ErrMsg)) { // Procesar Errores DetalleError detalleError = null; detalleError = new DetalleError(); detalleError.Code = feXCAEResponse.FEXErr.ErrCode; detalleError.Msg = feXCAEResponse.FEXErr.ErrMsg; corrida.DetalleErrores.Add(detalleError); } corrida.Procesada = true; ctx.SaveChanges(); return(ToCorridaDto(corrida, ctx.TipoDocumentoes.ToList(), ctx.TipoComprobantes.ToList(), ctx.TipoConceptoes.ToList())); } }