Example #1
0
        internal async Task <InvoiceEntity> CreateInvoiceCoreRaw(CreateInvoiceRequest invoice, StoreData store, string serverUrl, List <string> additionalTags = null, CancellationToken cancellationToken = default)
        {
            var storeBlob = store.GetStoreBlob();
            var entity    = _InvoiceRepository.CreateNewInvoice();

            entity.ExpirationTime       = entity.InvoiceTime + (invoice.Checkout.Expiration ?? storeBlob.InvoiceExpiration);
            entity.MonitoringExpiration = entity.ExpirationTime + (invoice.Checkout.Monitoring ?? storeBlob.MonitoringExpiration);
            if (invoice.Metadata != null)
            {
                entity.Metadata = InvoiceMetadata.FromJObject(invoice.Metadata);
            }
            invoice.Checkout ??= new CreateInvoiceRequest.CheckoutOptions();
            entity.Currency        = invoice.Currency;
            entity.Price           = invoice.Amount;
            entity.SpeedPolicy     = invoice.Checkout.SpeedPolicy ?? store.SpeedPolicy;
            entity.DefaultLanguage = invoice.Checkout.DefaultLanguage;
            IPaymentFilter excludeFilter = null;

            if (invoice.Checkout.PaymentMethods != null)
            {
                var supportedTransactionCurrencies = invoice.Checkout.PaymentMethods
                                                     .Select(c => PaymentMethodId.TryParse(c, out var p) ? p : null)
                                                     .ToHashSet();
                excludeFilter = PaymentFilter.Where(p => !supportedTransactionCurrencies.Contains(p));
            }
            entity.PaymentTolerance    = invoice.Checkout.PaymentTolerance ?? storeBlob.PaymentTolerance;
            entity.RedirectURLTemplate = invoice.Checkout.RedirectURL?.Trim();
            if (additionalTags != null)
            {
                entity.InternalTags.AddRange(additionalTags);
            }
            return(await CreateInvoiceCoreRaw(entity, store, excludeFilter, cancellationToken));
        }
Example #2
0
        /// <summary>
        /// Extrae la informaciĆ³n del PDF y la almacena en un CSV.
        /// </summary>
        private void GetCsvFromMetadata()
        {
            if (_Model.Invoice == null)
            {
                return;
            }

            InvoiceMetadata             invoice       = _Model.Invoice;
            Dictionary <string, string> data          = new Dictionary <string, string>();
            NumberFormatInfo            numFormatInfo = new NumberFormatInfo();

            numFormatInfo.NumberDecimalSeparator = ",";
            string issueDate   = null;
            string grossAmount = null;

            foreach (PropertyInfo pInf in invoice.GetType().GetProperties())
            {
                if (pInf.Name == "InvoiceNumber" ||
                    pInf.Name == "SellerPartyID" ||
                    pInf.Name == "BuyerPartyID" ||
                    pInf.Name == "CurrencyCode")
                {
                    object pValue = pInf.GetValue(invoice);
                    var    text   = $"{pValue}";
                    data.Add(pInf.Name, text);
                }
                else if (pInf.Name == "IssueDate")
                {
                    if (pInf.GetValue(invoice) != null)
                    {
                        issueDate = ((DateTime)pInf.GetValue(invoice)).ToString("dd/MM/yyyy");
                    }
                }
                else if (pInf.Name == "GrossAmount")
                {
                    if (System.Convert.ToDecimal(pInf.GetValue(invoice)) != 0)
                    {
                        grossAmount = ((decimal)pInf.GetValue(invoice)).ToString(numFormatInfo);
                    }
                }
            }

            string[] file     = _Model.PdfPath.Split('\\');
            string   nameFile = file[file.Length - 1];

            string line = string.Format("{0};{1};{2};{3};{4};{5};{6}\n",
                                        data["SellerPartyID"], data["BuyerPartyID"], data["InvoiceNumber"],
                                        issueDate, grossAmount, data["CurrencyCode"], nameFile);

            string path = @"C:\Users\Juan Bautista\Documents\Util\FicherosPdfTaggerModif\OUTPUT\datosPdfTaggerModif.csv";

            Console.WriteLine("Escribiendo en fichero");
            File.AppendAllText(path, line);
        }
        private InvoiceMetadata GetMetadataFromView()
        {
            //ExtraerDatosCSV();

            InvoiceMetadata invoice = new InvoiceMetadata();

            NumberFormatInfo numFormatInfo = new NumberFormatInfo();

            numFormatInfo.NumberDecimalSeparator = ",";
            NumberFormatInfo numFormatInfo2 = new NumberFormatInfo();

            numFormatInfo2.NumberDecimalSeparator = ".";


            foreach (PropertyInfo pInf in invoice.GetType().GetProperties())
            {
                Control[] ctlrs = Controls.Find($"tx{pInf.Name}", true);

                if (ctlrs.Length != 0)
                {
                    TextBox txb = (TextBox)ctlrs[0];

                    if (!string.IsNullOrEmpty(txb.Text))
                    {
                        object pValue = null;

                        if (txb.TextAlign == HorizontalAlignment.Right)
                        {
                            try
                            {
                                pValue = System.Convert.ToDecimal(txb.Text, numFormatInfo);
                            }
                            catch
                            {
                                pValue = System.Convert.ToDecimal(txb.Text, numFormatInfo2);
                            }
                        }
                        else
                        {
                            pValue = Convert(pInf.PropertyType, txb.Text);
                        }

                        pInf.SetValue(invoice, pValue);
                    }
                }
            }

            return(invoice);
        }
        /// <summary>
        /// Extraer los datos del CSV en vez de la vista.
        /// </summary>
        /// <param name="path"></param>
        public Dictionary <string, string> ExtraerDatosCSV(bool allInfo = true)
        {
            var txt = File.ReadAllText(@"C:\Users\Juan Bautista\Documents\Util\FicherosPdfTagger\jFras.csv");

            var lines = txt.Split('\n');

            string[] data;
            Dictionary <string, string> inMet = new Dictionary <string, string>();

            InvoiceMetadata invoiceMetadata = new InvoiceMetadata();

            foreach (var line in lines)
            {
                var      textGroup = line.Split(';');
                var      filePath  = _Model.PdfPath.Split('\\');
                string[] file      = filePath[filePath.Length - 1].Split('.');
                int      filename  = int.Parse(file[0]);

                if (textGroup[0].Equals(filename.ToString()))
                {
                    data = textGroup;
                    txSellerPartyID.Text = data[7];
                    _Model.Pdf.DocID     = txSellerPartyID.Text;
                    if (allInfo)
                    {
                        txBuyerPartyID.Text  = data[5];
                        txInvoiceNumber.Text = data[10];
                        txIssueDate.Text     = data[9];
                        txGrossAmount.Text   = data[12];
                        txCurrencyCode.Text  = data[13];
                    }
                    else
                    {
                        invoiceMetadata.BuyerPartyID = data[5];
                        invoiceMetadata.Add("BuyerPartyID", data[5]);
                        invoiceMetadata.Add("InvoiceNumber", data[10]);
                        invoiceMetadata.InvoiceNumber = data[10];
                        invoiceMetadata.Add("IssueDate", data[9]);
                        invoiceMetadata.IssueDate = data[9]; // ((DateTime)pInf.GetValue(invoice)).ToString("dd/MM/yyyy");
                        invoiceMetadata.Add("GrossAmount", data[12]);
                        invoiceMetadata.Add("CurrencyCode", data[13]);
                    }
                }
            }
            return(invoiceMetadata);
        }
Example #5
0
        private void GetViewFromMetadata()
        {
            if (_Model.Invoice == null)
            {
                return;
            }

            InvoiceMetadata invoice = _Model.Invoice;

            NumberFormatInfo numFormatInfo = new NumberFormatInfo();

            numFormatInfo.NumberDecimalSeparator = ".";


            foreach (PropertyInfo pInf in invoice.GetType().GetProperties())
            {
                Control[] ctlrs = Controls.Find($"tx{pInf.Name}", true);

                if (ctlrs.Length != 0 && pInf.Name != "SellerPartyID")
                {
                    TextBox txb = (TextBox)ctlrs[0];

                    object pValue = pInf.GetValue(invoice);

                    if (pValue != null)
                    {
                        if (pInf.PropertyType == typeof(decimal) &&
                            System.Convert.ToDecimal(pValue) != 0)
                        {
                            txb.Text = ((decimal)pValue).ToString(numFormatInfo);
                        }
                        else if (pInf.PropertyType == typeof(DateTime?) && pValue != null)
                        {
                            txb.Text = ((DateTime)pValue).ToString("dd/MM/yyyy");
                        }
                        else
                        {
                            txb.Text = $"{pValue}";
                        }
                    }
                }
            }
        }
        public async Task <IActionResult> PayPaymentRequest(string payReqId, bool redirectToInvoice = true,
                                                            decimal?amount = null, CancellationToken cancellationToken = default)
        {
            if (amount.HasValue && amount.Value <= 0)
            {
                return(BadRequest("Please provide an amount greater than 0"));
            }

            var result = await _PaymentRequestService.GetPaymentRequest(payReqId, GetUserId());

            if (result == null)
            {
                return(NotFound());
            }

            if (result.Archived)
            {
                if (redirectToInvoice)
                {
                    return(RedirectToAction("ViewPaymentRequest", new { Id = payReqId }));
                }

                return(BadRequest("Payment Request cannot be paid as it has been archived"));
            }

            result.HubPath = PaymentRequestHub.GetHubPath(Request);
            if (result.AmountDue <= 0)
            {
                if (redirectToInvoice)
                {
                    return(RedirectToAction("ViewPaymentRequest", new { Id = payReqId }));
                }

                return(BadRequest("Payment Request has already been settled."));
            }

            if (result.ExpiryDate.HasValue && DateTime.UtcNow >= result.ExpiryDate)
            {
                if (redirectToInvoice)
                {
                    return(RedirectToAction("ViewPaymentRequest", new { Id = payReqId }));
                }

                return(BadRequest("Payment Request has expired"));
            }

            var stateAllowedToDisplay = new HashSet <InvoiceState>
            {
                new InvoiceState(InvoiceStatusLegacy.New, InvoiceExceptionStatus.None),
                new InvoiceState(InvoiceStatusLegacy.New, InvoiceExceptionStatus.PaidPartial),
            };
            var currentInvoice = result
                                 .Invoices
                                 .FirstOrDefault(invoice => stateAllowedToDisplay.Contains(invoice.State));

            if (currentInvoice != null)
            {
                if (redirectToInvoice)
                {
                    return(RedirectToAction("Checkout", "UIInvoice", new { currentInvoice.Id }));
                }

                return(Ok(currentInvoice.Id));
            }

            if (result.AllowCustomPaymentAmounts && amount != null)
            {
                amount = Math.Min(result.AmountDue, amount.Value);
            }
            else
            {
                amount = result.AmountDue;
            }

            var pr = await _PaymentRequestRepository.FindPaymentRequest(payReqId, null, cancellationToken);

            var blob  = pr.GetBlob();
            var store = pr.StoreData;

            try
            {
                var redirectUrl = _linkGenerator.PaymentRequestLink(payReqId, Request.Scheme, Request.Host, Request.PathBase);

                var invoiceMetadata =
                    new InvoiceMetadata
                {
                    OrderId          = PaymentRequestRepository.GetOrderIdForPaymentRequest(payReqId),
                    PaymentRequestId = payReqId,
                    BuyerEmail       = result.Email
                };

                var invoiceRequest =
                    new CreateInvoiceRequest
                {
                    Metadata = invoiceMetadata.ToJObject(),
                    Currency = blob.Currency,
                    Amount   = amount.Value,
                    Checkout = { RedirectURL = redirectUrl }
                };

                var additionalTags = new List <string> {
                    PaymentRequestRepository.GetInternalTag(payReqId)
                };
                var newInvoice = await _InvoiceController.CreateInvoiceCoreRaw(invoiceRequest, store, Request.GetAbsoluteRoot(), additionalTags, cancellationToken);

                if (redirectToInvoice)
                {
                    return(RedirectToAction("Checkout", "UIInvoice", new { newInvoice.Id }));
                }

                return(Ok(newInvoice.Id));
            }
            catch (BitpayHttpException e)
            {
                return(BadRequest(e.Message));
            }
        }