public static CorridaAutorizacionDto ToCorridaDto(CorridaAutorizacion corrida, List <TipoDocumento> tiposDoc, List <TipoComprobante> tiposComprobante, List <TipoConcepto> tiposConcepto) { CorridaAutorizacionDto dto = new CorridaAutorizacionDto(); dto.Id = corrida.Id; dto.Fecha = corrida.Fecha; dto.Procesada = corrida.Procesada; dto.NombreDeArchivo = Path.GetFileName(corrida.PathArchivo); dto.PathArchivo = corrida.PathArchivo; if (tiposComprobante != null) { DetalleCabecera cabecera = corrida.DetalleCabeceras.FirstOrDefault(); if (cabecera != null) { TipoComprobante tipoComprobante = tiposComprobante.Where(c => c.CodigoAfip == cabecera.CbteTipo).First(); dto.TipoComprobante = string.Format("{0} - {1}", tipoComprobante.CodigoAfip, tipoComprobante.Descripcion); } } dto.ComprobantesAutorizados = ToDetalleComprobateDtoList(corrida.DetalleComprobantes.Where(dc => dc.Resultado == ResultadoCbte.Aprobado && dc.CorridaId == corrida.Id).ToList(), tiposDoc, tiposConcepto); dto.ComprobantesConObservaciones = ToDetalleComprobateDtoList(corrida.DetalleComprobantes.Where(dc => dc.Resultado == ResultadoCbte.Rechazado && dc.CorridaId == corrida.Id).ToList(), tiposDoc, tiposConcepto); dto.Errores = ToDetalleErrorDtoList(corrida.DetalleErrores.Where(e => e.CorridaId == corrida.Id).ToList()); dto.Eventos = ToDetalleEventoDtoList(corrida.DetalleEventos.Where(e => e.CorridaId == corrida.Id).ToList()); return(dto); }
public CorridaAutorizacionDto CrearNuevaCorrida(string xmlPath) { using (var ctx = new FacturaElectronicaEntities()) { CorridaAutorizacion corrida = new CorridaAutorizacion(); corrida.Fecha = DateTime.Now; corrida.PathArchivo = xmlPath; corrida.Procesada = null; ctx.CorridaAutorizacions.AddObject(corrida); ctx.SaveChanges(); return(ToCorridaDto(corrida, null, null, null)); } }
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())); } }