Exemple #1
0
        public async Task <IActionResult> Create([Bind("Id,Quantity,FileName,Printer,PrintDate,CompanyName,Type")] Print print)
        {
            if (print.Quantity <= 0)
            {
                return(NotFound("Vui lòng nhập số lượng files cần in"));
            }
            var curUser = await _userManager.GetUserAsync(User);

            if (curUser is null)
            {
                return(View("Error", "Bạn phải đăng nhập để thực hiện tác vụ này"));
            }
            var authorized = await IsAuthorized(curUser, "Prints", "Create");

            if (!authorized)
            {
                return(View("AccessDenied"));
            }
            Guid tempCode = new Guid();

            if (ModelState.IsValid)
            {
                Update(print, curUser);
                if (string.IsNullOrEmpty(print.Printer) || string.IsNullOrWhiteSpace(print.Printer))
                {
                    return(View("Error", "Vui lòng cập nhật họ tên để sử dụng tiếp tục sử dụng"));
                }
                var date     = print.PrintDate.ToString("dd/MM/yyyy");
                var lastName = curUser.Name.Split(" ").Last();

                var printed      = _context.Print.Where(e => e.Printer == lastName && e.PrintDate.ToString("dd/MM/yyyy") == date).Include(e => e.Files).FirstOrDefault();
                var printer      = print.Printer.Split(" ").Last();
                int printedFiles = 0;
                if (printed != null)
                {
                    printedFiles = printed.Quantity;
                    if (print.Quantity + printedFiles > 100)
                    {
                        return(View("Error", $"Vui lòng nhập số lượng file nhỏ hơn {100 - printedFiles + 1}"));
                    }
                    printed.Quantity += print.Quantity;
                    printed.PrintDate = print.PrintDate;

                    for (int i = 0; i < print.Quantity; i++)
                    {
                        var index = (i + 1 + printedFiles).ToString("000");
                        var text  = $"{printed.CompanyName}-{date}-{printer}-{index}";
                        printed.Files.Add(new Download
                        {
                            File   = printed.FileName,
                            QRCode = text,
                            Image  = GenerateQRCode(text)
                        });
                        // var filePath = $"{Path.GetTempPath()}{text}.pdf";
                        // GenerateQRCode(text);
                        //TODO add code to file
                        // SaveFile(filePath);
                        //TODO save file to google drive
                    }
                    tempCode = printed.Code;

                    _context.Entry(printed).State = EntityState.Modified;
                }
                else
                {
                    print.Files = new List <Download>();
                    var numberOfFiles = print.Quantity;
                    if (numberOfFiles <= 0 || numberOfFiles > 100)
                    {
                        return(View("Error", "Invalid number of files{numberOfFiles}, it must be between 0 and 101"));
                    }

                    for (int i = 0; i < numberOfFiles; i++)
                    {
                        var index = (i + 1 + printedFiles).ToString("000");
                        var text  = $"{print.CompanyName}-{date}-{printer}-{index}";
                        print.Files.Add(new Download
                        {
                            File   = print.FileName,
                            QRCode = text,
                            Image  = GenerateQRCode(text)
                        });
                        // var filePath = $"{Path.GetTempPath()}{text}.pdf";
                        // GenerateQRCode(text);
                        //TODO add code to file
                        // SaveFile(filePath);
                        //TODO save file to google drive
                    }
                    tempCode = print.Code;

                    _context.Add(print);
                }

                await _context.SaveChangesAsync();

                ViewBag.code = print.Code;
                string contents = "Dear Ms. Hương\n";
                contents += $"Ngày {date} Hệ thống đã nhận được yêu cầu in {print.Quantity} Phiếu đăng ký giữ chỗ dự án Vinhomes Grand Park từ {curUser.Name}.";
                contents += "\nRegards.\n";
                SendMail("Thông báo in hợp đồng", new MailboxAddress("Ms. Hương", "*****@*****.**"), contents);
                return(RedirectToAction("Download", new { code = tempCode }));
            }

            return(View("Error", $"Invalid model state {ModelState}!"));
        }