Ejemplo n.º 1
0
        public async Task <IActionResult> Profile(NewInvoiceModel model, IFormFile upload)
        {
            InvoiceModel invoice;

            try
            {
                if (model.Status == "Unpaid")
                {
                    if (string.IsNullOrEmpty(model.InvoiceNumber) || string.IsNullOrEmpty(model.ClientEmail) || string.IsNullOrEmpty(model.Amount))
                    {
                        return(View());
                    }

                    invoice = await _invoicesServiceClient.GenerateInvoiceAsync(new Service.Invoces.Client.Models.Invoice.NewInvoiceModel
                    {
                        MerchantId    = MerchantId,
                        InvoiceNumber = model.InvoiceNumber,
                        ClientName    = model.ClientName,
                        ClientEmail   = model.ClientEmail,
                        Amount        = double.Parse(model.Amount, CultureInfo.InvariantCulture),
                        Currency      = model.Currency,
                        DueDate       = DateTime.Parse(model.StartDate, CultureInfo.InvariantCulture)
                                        .Add(OrderLiveTime)
                                        .RepoDateStr()
                    });
                }
                else if (model.Status == "Draft")
                {
                    invoice = await _invoicesServiceClient.CreateDraftInvoiceAsync(new NewDraftInvoiceModel
                    {
                        MerchantId    = MerchantId,
                        InvoiceNumber = model.InvoiceNumber,
                        ClientName    = model.ClientName,
                        ClientEmail   = model.ClientEmail,
                        Amount        = double.Parse(model.Amount, CultureInfo.InvariantCulture),
                        Currency      = model.Currency,
                        DueDate       = DateTime.Parse(model.StartDate, CultureInfo.InvariantCulture)
                                        .Add(OrderLiveTime)
                                        .RepoDateStr()
                    });
                }
                else
                {
                    throw new InvalidOperationException("Unknown action");
                }

                if (upload != null)
                {
                    byte[] buffer = new byte[16 * 1024];
                    using (var ms = new MemoryStream())
                    {
                        await upload.CopyToAsync(ms);

                        buffer = ms.ToArray();
                    }
                    await _invoicesServiceClient.UploadFileAsync(invoice.InvoiceId, buffer, upload.FileName, upload.ContentType);
                }
            }
            catch (Exception exception)
            {
                await _log.WriteErrorAsync(nameof(HomeController), nameof(Profile), model.ToJson(), exception);

                return(BadRequest("Cannot create invoce!"));
            }

            ViewBag.IsInvoiceCreated  = true;
            TempData["GeneratedItem"] = JsonConvert.SerializeObject(invoice);
            return(View());
        }