using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.EntityFrameworkCore; using EveryThing.Data; using EveryThing.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using ClosedXML.Excel; using System.IO; using Microsoft.AspNetCore.Hosting; namespace EveryThing.Pages.Invoices { [Authorize(Roles = "Administrator,InvoicingUser")] public class IndexModel : PageModel { private readonly IWebHostEnvironment _hostingEnvironment; private readonly ApplicationDbContext _context; private readonly UserManager _userManager; public IndexModel(ApplicationDbContext context, UserManager userManager, IWebHostEnvironment environment) { _context = context; _userManager = userManager; _hostingEnvironment = environment; } public IList Invoice { get;set; } public bool ShowProjects { get; set; } = false; public async Task OnGetAsync(int type, string searchString, string finishedProjects) { var user = _userManager.GetUserAsync(User).Result; var invoiceType = (Models.Invoice.Invoice.InvoiceType)type; //Kako spraviti type preko osvezovanja ViewData["Type"] = type; ViewData["SearchString"] = searchString; ViewData["FinishedProjects"] = finishedProjects == "on" ? "checked" : ""; Invoice = await _context.Invoices .Include(p => p.Company) .Include(p => p.Partner) .Where(x => x.Type == invoiceType) .OrderBy(x => x.InvoiceYear) .ThenBy(x => x.InvoiceNumber) .ToListAsync(); // Search string if (!string.IsNullOrEmpty(searchString)) { Invoice = Invoice.Where(s => s.Partner.Title.Contains(searchString, StringComparison.OrdinalIgnoreCase) || s.InvoiceNumberFormatted.Contains(searchString, StringComparison.OrdinalIgnoreCase)).ToList(); } } public IActionResult OnDeleteInvoice(int idInvoice) { var user = _userManager.GetUserAsync(User).Result; var successful = true; var error = ""; var invoice = _context.Invoices .Where(x => x.IdCompanyFk == user.IdCompanyFk) .FirstOrDefault(x => x.IdInvoice == idInvoice); if (invoice != null) { var invoiceItems = _context.InvoiceItems.Where(x => x.IdInvoiceFk == idInvoice).ToList(); for (var i = 0; i < invoiceItems.Count(); i++) { _context.InvoiceItems.Remove(invoiceItems[i]); } _context.Invoices.Remove(invoice); _context.SaveChanges(); } else { successful = false; error = $"Invoice with ID: {idInvoice} not found"; } return new JsonResult(new { idInvoice = idInvoice, error = error, successful = successful }); } public IActionResult OnGetExcel(int idInvoice) { var user = _userManager.GetUserAsync(User).Result; var successful = true; var error = ""; var name = ""; var base64 = ""; var invoice = _context.Invoices .Where(x => x.IdCompanyFk == user.IdCompanyFk) .FirstOrDefault(x => x.IdInvoice == idInvoice); if (invoice != null) { name = invoice.InvoiceNumberFull.Replace("-", "_") + ".xlsx"; var invoiceItems = _context.InvoiceItems .Include(x => x.Item) .Include(x => x.InvoiceItemJoin) .ThenInclude(x=> x.Invoice) .Where(x => x.IdInvoiceFk == idInvoice).ToList(); var workbook = new XLWorkbook(); var workSheet = workbook.Worksheets.Add("Dokument"); var counter = 1; workSheet.Cell($"A{counter}").Value = "Artikel"; workSheet.Cell($"B{counter}").Value = "Količina"; workSheet.Cell($"C{counter}").Value = "Cena"; workSheet.Cell($"D{counter}").Value = "Rabat"; workSheet.Cell($"E{counter}").Value = "Vrednost"; workSheet.Cell($"F{counter}").Value = "Opis"; workSheet.Cell($"G{counter}").Value = "Št. kup. naročila"; workSheet.Cell($"H{counter}").Value = "Št. naročila"; workSheet.Cell($"I{counter}").Value = "Dobavni rok"; //workSheet.Cell($"J{counter}").Value = "DN Z"; //workSheet.Cell($"K{counter}").Value = "DN Z Vnos"; //workSheet.Cell($"L{counter}").Value = "DN P"; //workSheet.Cell($"M{counter}").Value = "DN P Vnos"; //workSheet.Cell($"N{counter}").Value = "DN N"; //workSheet.Cell($"O{counter}").Value = "DN N Vnos"; //workSheet.Cell($"P{counter}").Value = "Prihod/Odhod nepreračunan"; //workSheet.Cell($"Q{counter}").Value = "Skupaj nepreračunan"; foreach (var invoiceItem in invoiceItems) { counter++; workSheet.Cell($"A{counter}").Value = invoiceItem.Item?.Title; workSheet.Cell($"B{counter}").Value = invoiceItem.Quantity; workSheet.Cell($"C{counter}").Value = invoiceItem.Price; workSheet.Cell($"D{counter}").Value = invoiceItem.Discount; workSheet.Cell($"E{counter}").Value = invoiceItem.TotalValue; workSheet.Cell($"F{counter}").Value = invoiceItem.ItemDescription; workSheet.Cell($"G{counter}").Value = "'" + invoiceItem.InvoiceItemJoin?.Invoice?.BuyersOrderNumber; workSheet.Cell($"H{counter}").Value = "'" + invoiceItem.InvoiceItemJoin?.Invoice?.InvoiceNumberFormatted; workSheet.Cell($"I{counter}").Value = invoice.DateOfDispatch == null ? "" : ((DateTime)invoice.DateOfDispatch).ToString("dd.MM.yyyy"); } //var range = workSheet.Range(1, 1, counter - 1, 9); //var table = range.CreateTable(); //table.Theme = XLTableTheme.TableStyleMedium5; var tmpFilePath = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", Guid.NewGuid().ToString().Replace("-", "_") + ".xlsx"); workbook.SaveAs(tmpFilePath); var tempByte = System.IO.File.ReadAllBytes(tmpFilePath); base64 = Convert.ToBase64String(tempByte); System.IO.File.Delete(tmpFilePath); } else { successful = false; error = $"Invoice with ID: {idInvoice} not found"; } return new JsonResult(new { idInvoice, error, successful, name, base64 }); } } }