Example #1
0
        private async Task <FECAEResponse> FECAESolicitarAsync(Order order)
        {
            var payerData = new PayerDataRevenue(order, _config.GetValue <int>("LimiteFacturaB"));

            var requestInfo = new FECAERequestInfo(payerData, _calendar.LocalTime(), _config.GetValue <int>("Iva"), _config.GetValue <long>("CUIT"), await GetSignTicket(AfipWsFe, _isProd), await GetTokenTicket(AfipWsFe, _isProd), _config.GetValue <int>("PtoVtaAfip"));

            FECAEResponse result = await FECAESolicitarAsync(requestInfo);

            return(result);
        }
Example #2
0
        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));
        }
Example #3
0
        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));
            }
        }
Example #4
0
        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);
        }