private async Task <FECAEResponse> ParseFeCaeResponseAsync(ElectronicInvoiceProd.FECAESolicitarResponse input, ElectronicInvoiceProd.FEAuthRequest _auth, ElectronicInvoiceProd.ServiceSoapClient soapClient, FECAERequestInfo requestInfo) { var errs = input.Body.FECAESolicitarResult.Errors?.Select(x => _mapper.Map <ElectronicInvoiceProd.Err, FECAEResponse.CodeMessage>(x)); var events = input.Body.FECAESolicitarResult.Events?.Select(x => _mapper.Map <ElectronicInvoiceProd.Evt, FECAEResponse.CodeMessage>(x)); var feCaeCabResponse = _mapper.Map <ElectronicInvoiceProd.FECAECabResponse, FECAEResponse.FECAECabResponse>(input.Body.FECAESolicitarResult.FeCabResp); var feDetResp = await Task.WhenAll(input.Body.FECAESolicitarResult.FeDetResp?.Select(x => GetComprobanteProd(input, _auth, soapClient, requestInfo, x, feCaeCabResponse))); return(new FECAEResponse(errs, events, feCaeCabResponse, feDetResp)); }
private async Task <FECAEResponse> FECAESolicitarAsync(FECAERequestInfo requestInfo) { if (_isProd) { var config = new ElectronicInvoiceProd.ServiceSoapClient.EndpointConfiguration(); var soapClient = new ElectronicInvoiceProd.ServiceSoapClient(config); var _auth = _mapper.Map <FEAuthRequest, ElectronicInvoiceProd.FEAuthRequest>(requestInfo.AuthRequest); var fECompUltimo = await soapClient.FECompUltimoAutorizadoAsync( _mapper.Map <FEAuthRequest, ElectronicInvoiceProd.FEAuthRequest>(requestInfo.AuthRequest), requestInfo.FeCabReq.PtoVta, requestInfo.FeCabReq.CbteTipo); requestInfo.CbteDesde = fECompUltimo.Body.FECompUltimoAutorizadoResult.CbteNro + 1; requestInfo.CbteHasta = fECompUltimo.Body.FECompUltimoAutorizadoResult.CbteNro + requestInfo.FeCabReq.CantReg; var feCaeRequest = new ElectronicInvoiceProd.FECAERequest(); feCaeRequest.FeCabReq = _mapper.Map <FECAECabRequest, ElectronicInvoiceProd.FECAECabRequest>(requestInfo.FeCabReq); feCaeRequest.FeDetReq = requestInfo.ToFECAEDetRequestList().Select(x => _mapper.Map <FECAEDetRequest, ElectronicInvoiceProd.FECAEDetRequest>(x)).ToArray(); var response = await soapClient.FECAESolicitarAsync(_auth, feCaeRequest); return(await ParseFeCaeResponseAsync(response, _auth, soapClient, requestInfo)); } else { var config = new ElectronicInvoiceTest.ServiceSoapClient.EndpointConfiguration(); var soapClient = new ElectronicInvoiceTest.ServiceSoapClient(config); var _auth = _mapper.Map <FEAuthRequest, ElectronicInvoiceTest.FEAuthRequest>(requestInfo.AuthRequest); var fECompUltimo = await soapClient.FECompUltimoAutorizadoAsync( _mapper.Map <FEAuthRequest, ElectronicInvoiceTest.FEAuthRequest>(requestInfo.AuthRequest), requestInfo.FeCabReq.PtoVta, requestInfo.FeCabReq.CbteTipo); requestInfo.CbteDesde = fECompUltimo.Body.FECompUltimoAutorizadoResult.CbteNro + 1; requestInfo.CbteHasta = requestInfo.CbteDesde; var feCaeRequest = new ElectronicInvoiceTest.FECAERequest(); feCaeRequest.FeCabReq = _mapper.Map <FECAECabRequest, ElectronicInvoiceTest.FECAECabRequest>(requestInfo.FeCabReq); feCaeRequest.FeDetReq = requestInfo.ToFECAEDetRequestList().Select(x => _mapper.Map <FECAEDetRequest, ElectronicInvoiceTest.FECAEDetRequest>(x)).ToArray(); var response = await soapClient.FECAESolicitarAsync(_auth, feCaeRequest); return(await ParseFeCaeResponseAsync(response, _auth, soapClient, requestInfo)); } }
private async Task <FECAEResponse.FECAEDetResponse> GetComprobanteProd(ElectronicInvoiceProd.FECAESolicitarResponse input, ElectronicInvoiceProd.FEAuthRequest _auth, ElectronicInvoiceProd.ServiceSoapClient soapClient, FECAERequestInfo requestInfo, ElectronicInvoiceProd.FECAEDetResponse x, FECAEResponse.FECAECabResponse feCaeCabResponse) { var result = _mapper.Map <ElectronicInvoiceProd.FECAEDetResponse, FECAEResponse.FECAEDetResponse>(x); if (feCaeCabResponse.Resultado == "A") { if (input.Body.FECAESolicitarResult.FeDetResp.Count() == 1) { result.ImpTotal = Convert.ToDouble(requestInfo.Invoices.Sum()); } else { var consultar = new ElectronicInvoiceProd.FECompConsultaReq { CbteNro = x.CbteDesde, CbteTipo = feCaeCabResponse.CbteTipo, PtoVta = feCaeCabResponse.PtoVta }; try { var comprobate = await soapClient.FECompConsultarAsync(_auth, consultar); result.ImpTotal = comprobate.Body.FECompConsultarResult.ResultGet.ImpTotal; } catch { } } } return(result); }