Exemple #1
0
        public ActionResult DrawInvoice(InvoiceQueryViewModel viewModel)
        {
            //HtmlRender.RenderToImage
            //ViewBag.ViewModel = viewModel;
            //ViewResult result = (ViewResult)PrintInvoice(viewModel);
            //result.ViewName = "CanvasDrawInvoice";
            //return result;
            String viewUrl = Settings.Default.HostDomain + VirtualPathUtility.ToAbsolute("~/Invoice/CanvasPrintInvoice") + "?" + Request.Params["QUERY_STRING"];

            using (WebClient client = new WebClient())
            {
                client.Encoding = Encoding.UTF8;
                String data = client.DownloadString(viewUrl);
                using (Image image = HtmlRender.RenderToImage(data))
                {
                    //using (Bitmap bmp = new Bitmap(image, new Size(image.Size.Width * 9 / 10, image.Size.Height * 9 / 10)))
                    //{
                    Response.Clear();
                    Response.ContentType = "image/Png";
                    image.Save(Response.OutputStream, ImageFormat.Png);
                    //}
                    //Response.End();
                }
            }

            return(new EmptyResult());
        }
Exemple #2
0
        public ActionResult PrintInvoice(InvoiceQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var items = models.GetTable <InvoiceItem>().Where(i => false);

            if (viewModel.InvoiceID != null && viewModel.InvoiceID.Length > 0)
            {
                items = models.GetTable <InvoiceItem>().Where(i => viewModel.InvoiceID.Contains(i.InvoiceID));
            }
            else if (viewModel.UID.HasValue)
            {
                var profile = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();
                if (profile != null)
                {
                    items = models.GetTable <DocumentPrintQueue>().Where(d => d.UID == viewModel.UID)
                            .Join(models.GetTable <InvoiceItem>(), d => d.DocID, i => i.InvoiceID, (d, i) => i);
                }
            }
            else
            {
                viewModel.InvoiceNo = viewModel.InvoiceNo.GetEfficientString();
                if (viewModel.InvoiceNo != null)
                {
                    if (Regex.IsMatch(viewModel.InvoiceNo, "[A-Za-z]{2}[0-9]{8}"))
                    {
                        String trackCode = viewModel.InvoiceNo.Substring(0, 2).ToUpper();
                        String no        = viewModel.InvoiceNo.Substring(2);
                        items = models.GetTable <InvoiceItem>().Where(c => c.TrackCode == trackCode &&
                                                                      c.No == no);
                    }
                }
            }
            return(View(items));
        }
Exemple #3
0
        public ActionResult PrintAllowance(InvoiceQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var items = models.GetTable <InvoiceAllowance>().Where(i => false);

            if (viewModel.AllowanceID != null && viewModel.AllowanceID.Length > 0)
            {
                items = models.GetTable <InvoiceAllowance>().Where(i => viewModel.AllowanceID.Contains(i.AllowanceID));
            }
            else if (viewModel.UID.HasValue)
            {
                var profile = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();
                if (profile != null)
                {
                    items = models.GetTable <DocumentPrintQueue>().Where(d => d.UID == viewModel.UID)
                            .Join(models.GetTable <InvoiceAllowance>(), d => d.DocID, i => i.AllowanceID, (d, i) => i);
                }
            }
            else
            {
                viewModel.InvoiceNo = viewModel.InvoiceNo.GetEfficientString();
                if (viewModel.InvoiceNo != null)
                {
                    items = models.GetTable <InvoiceAllowance>().Where(c => c.AllowanceNumber == viewModel.InvoiceNo);
                }
            }
            return(View(items));
        }
Exemple #4
0
        public ActionResult CanvasPrintAllowance(InvoiceQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            ViewResult result = (ViewResult)PrintAllowance(viewModel);

            result.ViewName = "CanvasPrintAllowance";
            return(result);
        }
Exemple #5
0
        public ActionResult PrintAll(InvoiceQueryViewModel viewModel)
        {
            ViewResult           result = (ViewResult)InquireInvoice(viewModel);
            IQueryable <Payment> items  = (IQueryable <Payment>)result.Model;

            string pdfFile = createInvoicePDF(items.Select(p => p.InvoiceItem));

            return(File(pdfFile, "application/octet-stream", Path.GetFileName(pdfFile)));
        }
Exemple #6
0
        public ActionResult PrintAllInvoice(InvoiceQueryViewModel viewModel, String printerIP)
        {
            ViewResult           result = (ViewResult)InquireInvoice(viewModel);
            IQueryable <Payment> items  = (IQueryable <Payment>)result.Model;

            ViewBag.PrinterIP = printerIP;

            return(View("PrintInvoiceImage", items.Select(p => p.InvoiceItem)));
        }
Exemple #7
0
        public ActionResult PrintAllowanceImage(InvoiceQueryViewModel viewModel, String printerIP)
        {
            ViewBag.ViewModel = viewModel;
            ViewResult result = (ViewResult)PrintAllowance(viewModel);

            result.ViewName   = "~/Views/Invoice/PrintAllowanceImage.cshtml";
            ViewBag.PrinterIP = printerIP;
            return(result);
        }
        public async Task <ActionResult> GetInvoicePDF(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult)PrintInvoice(viewModel);
            IQueryable <InvoiceItem> items = (IQueryable <InvoiceItem>)result.Model;

            string pdfFile = await createInvoicePDFAsync(items);

            return(new PhysicalFileResult(pdfFile, "application/pdf"));
            //return new PhysicalFileResult(pdfFile, "application/pdf", Path.GetFileName(pdfFile));
        }
        public async Task <ActionResult> PrintAll(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult) await InquireInvoiceAsync(viewModel);

            IQueryable <Payment> items = (IQueryable <Payment>)result.Model;

            string pdfFile = await createInvoicePDFAsync(items.Select(p => p.InvoiceItem));

            return(new PhysicalFileResult(pdfFile, "application/octet-stream" /*, Path.GetFileName(pdfFile)*/));
        }
Exemple #10
0
        public ActionResult InquireInvoiceByDispatch(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult)InquireInvoice(viewModel);

            if (result.Model is IQueryable <Payment> )
            {
                result.ViewName = "~/Views/Invoice/Module/InvoiceItemSummary.ascx";
            }
            return(result);
        }
Exemple #11
0
        public ActionResult GetAllowancePDF(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult)PrintAllowance(viewModel);
            IQueryable <InvoiceAllowance> items = (IQueryable <InvoiceAllowance>)result.Model;

            string pdfFile = createAllowancePDF(items);

            //return File(pdfFile, "application/pdf", Path.GetFileName(pdfFile));
            return(File(pdfFile, "application/pdf"));
        }
Exemple #12
0
        public ActionResult InquireInvoiceToCommitAllowance(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult)InquireInvoice(viewModel);

            if (result.Model is IQueryable <Payment> )
            {
                ViewBag.DataAction = "CommitAllowance";
                result.ViewName    = "~/Views/Invoice/Module/InvoiceItemList.ascx";
            }
            return(result);
        }
Exemple #13
0
        public ActionResult PrintIndex(InvoiceQueryViewModel viewModel)
        {
            if (String.IsNullOrEmpty(viewModel.InvoiceNo) && viewModel.InvoiceID == null)
            {
                viewModel.HandlerID = -1;
            }
            ViewBag.ViewModel = viewModel;
            ViewResult result = (ViewResult)InquireInvoice(viewModel);

            return(View("PrintIndex", result.Model ?? models.GetTable <Payment>().Where(p => false)));
        }
Exemple #14
0
        public ActionResult PrintAllowanceImageByUID(InvoiceQueryViewModel viewModel, String printerIP)
        {
            var profile = HttpContext.GetUser();

            if (profile == null)
            {
                profile = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();
                if (profile != null)
                {
                    HttpContext.SignOn(profile);
                }
            }

            return(PrintAllowanceImage(viewModel, printerIP));
        }
        public async Task <ActionResult> LoadInvoiceImageByUID(InvoiceQueryViewModel viewModel, String printerIP)
        {
            var profile = await HttpContext.GetUserAsync();

            if (profile == null)
            {
                profile = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();
                if (profile != null)
                {
                    await HttpContext.SignOnAsync(profile);
                }
            }

            return(LoadInvoiceImage(viewModel, printerIP));
        }
Exemple #16
0
        public ActionResult LoadInvoiceImage(InvoiceQueryViewModel viewModel, String printerIP)
        {
            ViewBag.ViewModel = viewModel;
            ViewResult result = (ViewResult)PrintInvoice(viewModel);

            //if (String.IsNullOrEmpty(printerIP))
            //{
            //    result.ViewName = "LoadInvoiceImage";
            //}
            //else
            {
                ViewBag.PrinterIP = printerIP;
                result.ViewName   = "~/Views/Invoice/PrintInvoiceImage.cshtml";
            }
            return(result);
        }
        public async Task <ActionResult> DrawAllowanceAsync(InvoiceQueryViewModel viewModel)
        {
            String viewUrl   = $"{Startup.Properties["HostDomain"]}{VirtualPathUtility.ToAbsolute("~/Invoice/CanvasPrintAllowance")}{Request.QueryString}";
            var    converter = new HtmlConverter();
            var    bytes     = converter.FromUrl(viewUrl);

            Response.ContentType = "image/jpeg";
            using (FileBufferingWriteStream output = new FileBufferingWriteStream())
            {
                output.Write(bytes);
                //output.Seek(0, SeekOrigin.Begin);
                await output.DrainBufferAsync(Response.Body);
            }

            return(new EmptyResult());
        }
Exemple #18
0
        public ActionResult DrawAllowance(InvoiceQueryViewModel viewModel)
        {
            String viewUrl = Settings.Default.HostDomain + VirtualPathUtility.ToAbsolute("~/Invoice/CanvasPrintAllowance") + "?" + Request.Params["QUERY_STRING"];

            using (WebClient client = new WebClient())
            {
                client.Encoding = Encoding.UTF8;
                String data = client.DownloadString(viewUrl);
                using (Image image = HtmlRender.RenderToImage(data))
                {
                    Response.Clear();
                    Response.ContentType = "image/Png";
                    image.Save(Response.OutputStream, ImageFormat.Png);
                    //Response.End();
                }
            }

            return(new EmptyResult());
        }
Exemple #19
0
        public ActionResult VoidInvoice(InvoiceQueryViewModel viewModel)
        {
            ViewResult           result = (ViewResult)InquireInvoice(viewModel);
            IQueryable <Payment> items  = (IQueryable <Payment>)result.Model;

            if (items.Count() > 0)
            {
                String C0701Outbound = Path.Combine(Settings.Default.EINVTurnKeyPath, "C0701", "SRC");
                if (!Directory.Exists(C0701Outbound))
                {
                    Directory.CreateDirectory(C0701Outbound);
                }

                foreach (var item in items.Select(p => p.InvoiceItem).Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票).ToArray())
                {
                    String fileName = Path.Combine(C0701Outbound, item.TrackCode + item.No + ".xml");
                    item.CreateC0701().ConvertToXml().Save(fileName);
                }
            }

            return(Json(new { result = true }, JsonRequestBehavior.AllowGet));
        }
        public async Task <ActionResult> VoidInvoice(InvoiceQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult) await InquireInvoiceAsync(viewModel);

            IQueryable <Payment> items = (IQueryable <Payment>)result.Model;

            if (items.Count() > 0)
            {
                String C0701Outbound = Path.Combine(Startup.Properties["EINVTurnKeyPath"], "C0701", "SRC");
                if (!Directory.Exists(C0701Outbound))
                {
                    Directory.CreateDirectory(C0701Outbound);
                }

                foreach (var item in items.Select(p => p.InvoiceItem).Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票).ToArray())
                {
                    String fileName = Path.Combine(C0701Outbound, item.TrackCode + item.No + ".xml");
                    item.CreateC0701().ConvertToXml().Save(fileName);
                }
            }

            return(Json(new { result = true }));
        }
        // GET: InvoiceConsole
        public ActionResult DownloadInvoiceNoIntervalCsv(InvoiceQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            if (viewModel.KeyID != null)
            {
                viewModel.TrackID = viewModel.DecryptKeyValue();
            }

            IQueryable <InvoiceTrackCode> items = models.GetTable <InvoiceTrackCode>();

            if (viewModel.TrackID.HasValue)
            {
                items = items.Where(t => t.TrackID == viewModel.TrackID);
            }
            else
            {
                if (!viewModel.DateFrom.HasValue)
                {
                    viewModel.DateFrom = DateTime.Today.FirstDayOfMonth();
                    if (viewModel.DateFrom.Value.Month % 2 == 0)
                    {
                        viewModel.DateFrom = viewModel.DateFrom.Value.AddMonths(-1);
                    }
                }
                items = items.Where(t => t.Year == viewModel.DateFrom.Value.Year)
                        .Where(t => t.PeriodNo == viewModel.TrackPeriodNo);
            }

            viewModel.TrackCode = viewModel.TrackCode.GetEfficientString();
            if (viewModel.TrackCode != null)
            {
                items = items.Where(t => t.TrackCode == viewModel.TrackCode);
            }

            return(View("~/Views/InvoiceConsole/Module/DownloadInvoiceNoIntervalCsv.cshtml", items));
        }
Exemple #22
0
        public ActionResult CommitInvoiceTrackNoInterval(InvoiceQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var profile = HttpContext.GetUser();

            if (viewModel.BookletBranchID == null || viewModel.BookletBranchID.Length == 0 || viewModel.BookletBranchID.Any(c => !c.HasValue))
            {
                ModelState.AddModelError("BookletBranchID", "請選擇分店!!");
            }

            if (viewModel.KeyID != null)
            {
                viewModel.TrackID = viewModel.DecryptKeyValue();
            }

            var trackCode = models.GetTable <InvoiceTrackCode>()
                            .Where(t => t.TrackID == viewModel.TrackID).FirstOrDefault();

            if (trackCode == null)
            {
                viewModel.TrackCode = viewModel.TrackCode.GetEfficientString();
                if (viewModel.TrackCode == null || !Regex.IsMatch(viewModel.TrackCode, "[A-Z]{2}"))
                {
                    ModelState.AddModelError("TrackCode", "請輸入字軌");
                }

                if (!viewModel.Year.HasValue)
                {
                    ModelState.AddModelError("Year", "請選擇發票年度");
                }

                if (!viewModel.PeriodNo.HasValue)
                {
                    ModelState.AddModelError("PeriodNo", "請選擇期別");
                }
            }

            int?range = 0, assignedBooklet = 0;;

            if (!viewModel.StartNo.HasValue || !(viewModel.StartNo >= 0 && viewModel.StartNo < 100000000))
            {
                ModelState.AddModelError("StartNo", "請輸入起號");
            }
            else if (!viewModel.EndNo.HasValue || !(viewModel.EndNo >= 0 && viewModel.EndNo < 100000000))
            {
                ModelState.AddModelError("EndNo", "請輸入迄號");
            }
            else if (viewModel.EndNo <= viewModel.StartNo || (((range = viewModel.EndNo - viewModel.StartNo + 1)) % 50 != 0))
            {
                ModelState.AddModelError("StartNo", "不符號碼大小順序與差距為50之倍數原則");
            }
            else if ((assignedBooklet = viewModel.BookletCount.Where(c => c.HasValue && c > 0).Sum(c => c)) > (range / 50))
            {
                ModelState.AddModelError("BookletCount", "輸入總本數超過配號區間");
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = ModelState;
                return(View(ConsoleHomeController.InputErrorView));
            }

            if (trackCode == null)
            {
                trackCode = models.GetTable <InvoiceTrackCode>()
                            .Where(t => t.TrackCode == viewModel.TrackCode && t.Year == viewModel.Year && t.PeriodNo == viewModel.PeriodNo).FirstOrDefault();
            }

            if (trackCode == null)
            {
                trackCode = new InvoiceTrackCode
                {
                    TrackCode = viewModel.TrackCode,
                    Year      = viewModel.Year.Value,
                    PeriodNo  = viewModel.PeriodNo.Value,
                };
                models.GetTable <InvoiceTrackCode>().InsertOnSubmit(trackCode);
            }

            int?startNo = trackCode.StartNo = viewModel.StartNo;

            trackCode.EndNo = viewModel.EndNo;

            foreach (var b in viewModel.BookletBranchID)
            {
                if (!trackCode.InvoiceTrackCodeAssignment.Any(t => t.SellerID == b))
                {
                    trackCode.InvoiceTrackCodeAssignment.Add(new InvoiceTrackCodeAssignment
                    {
                        SellerID = b.Value
                    });
                }
            }

            models.SubmitChanges();

            for (int idx = 0; idx < viewModel.BookletBranchID.Length; idx++)
            {
                var interval = models.GetTable <InvoiceNoInterval>()
                               .Where(i => i.SellerID == viewModel.BookletBranchID[idx])
                               .Where(i => i.TrackID == trackCode.TrackID).FirstOrDefault();

                if (interval == null)
                {
                    if (!viewModel.BookletCount[idx].HasValue || viewModel.BookletCount[idx] <= 0)
                    {
                        continue;
                    }

                    interval = new InvoiceNoInterval
                    {
                        TrackID  = trackCode.TrackID,
                        SellerID = viewModel.BookletBranchID[idx].Value,
                    };

                    models.GetTable <InvoiceNoInterval>().InsertOnSubmit(interval);
                }
                else
                {
                    if (interval.InvoiceNoAssignment.Any())
                    {
                        if (interval.StartNo != startNo ||
                            !viewModel.BookletCount[idx].HasValue ||
                            viewModel.BookletCount[idx] <= 0)
                        {
                            ModelState.AddModelError($"BranchID_{viewModel.BookletBranchID[idx]}", "字軌配號已使用,無法修改");
                            continue;
                        }
                        else if ((startNo + viewModel.BookletCount[idx] * 50 - 1) < interval.EndNo)
                        {
                            ModelState.AddModelError($"BranchID_{viewModel.BookletBranchID[idx]}", "字軌配號已使用本組數,只允許增加");
                            continue;
                        }
                    }
                    else if (!viewModel.BookletCount[idx].HasValue || viewModel.BookletCount[idx] <= 0)
                    {
                        models.GetTable <InvoiceNoInterval>().DeleteOnSubmit(interval);
                        continue;
                    }
                }

                interval.StartNo = startNo.Value;
                startNo         += viewModel.BookletCount[idx] * 50;
                interval.EndNo   = startNo.Value - 1;
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = ModelState;
                return(View(ConsoleHomeController.InputErrorView));
            }

            try
            {
                models.SubmitChanges();
                if (assignedBooklet > 0)
                {
                    return(Json(new { result = true, message = $"總本數:{range / 50},已配置本數:{assignedBooklet}" }));
                }
                else
                {
                    models.ExecuteCommand("delete InvoiceTrackCode where TrackID = {0}", trackCode.TrackID);
                    return(Json(new { result = true, message = "未配置本組數。" }));
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return(Json(new { result = false, message = ex.Message }));
            }
        }
        public ActionResult CheckTurnkeyLogs(InvoiceQueryViewModel viewModel)
        {
            if (viewModel.Year.HasValue && viewModel.Month.HasValue)
            {
                viewModel.DateFrom = new DateTime(viewModel.Year.Value, viewModel.Month.Value, 1);
                if (viewModel.DateFrom.Value.Month % 2 == 0)
                {
                    viewModel.DateFrom = viewModel.DateFrom.Value.AddMonths(-1);
                }
                viewModel.DateTo = viewModel.DateFrom.Value.AddMonths(2);
            }
            else
            {
                if (!viewModel.DateFrom.HasValue)
                {
                    viewModel.DateFrom = DateTime.Today.FirstDayOfMonth();
                    if (viewModel.DateFrom.Value.Month % 2 == 0)
                    {
                        viewModel.DateFrom = viewModel.DateFrom.Value.AddMonths(-1);
                    }
                }
                if (!viewModel.DateTo.HasValue)
                {
                    viewModel.DateTo = viewModel.DateFrom.Value.AddMonths(2);
                }
            }

            var items = models.GetTable <InvoiceItem>()
                        .Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票)
                        .Where(i => i.InvoiceDate >= viewModel.DateFrom && i.InvoiceDate < viewModel.DateTo);

            ViewBag.ViewModel = viewModel;
            ViewBag.DataItems = items;

            var cancellationItems = models.GetTable <InvoiceCancellation>().Where(i => i.CancelDate >= viewModel.DateFrom && i.CancelDate < viewModel.DateTo);

            ViewBag.CancellationItems = cancellationItems;

            var allowanceItems = models.GetTable <InvoiceAllowance>().Where(a => a.AllowanceDate >= viewModel.DateFrom && a.AllowanceDate < viewModel.DateTo);

            ViewBag.AllowanceItems = allowanceItems;

            void buildInvoiceLogs(DataSet ds)
            {
                var logItems = items.Where(i => i.InvoiceItemDispatchLog == null || !i.InvoiceItemDispatchLog.Status.HasValue || i.InvoiceItemDispatchLog.Status == (int)Naming.GeneralStatus.Failed);
                var details  = logItems
                               .OrderBy(i => i.SellerID)
                               .ThenBy(i => i.InvoiceID)
                               .ToArray()
                               .Select(i => new
                {
                    發票號碼  = $"{i.TrackCode}{i.No}",
                    發票日期  = i.InvoiceDate,
                    開立人統編 = i.Organization.ReceiptNo,
                });

                DataTable table = details.ToDataTable();

                table.TableName = "發票未傳送";
                ds.Tables.Add(table);
            }

            void buildInvoiceCancellationLogs(DataSet ds)
            {
                var calcCancellation = models.GetTable <InvoiceItem>()
                                       .Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票)
                                       .Join(models.GetTable <Payment>()
                                             .Join(models.GetTable <VoidPayment>().Where(v => v.Status == (int)Naming.CourseContractStatus.已生效),
                                                   p => p.PaymentID, v => v.VoidID, (p, v) => p),
                                             i => i.InvoiceID, p => p.InvoiceID, (i, p) => i)
                                       .Join(cancellationItems, i => i.InvoiceID, c => c.InvoiceID, (i, c) => c);

                var logItems = calcCancellation.Where(i => i.InvoiceCancellationDispatchLog == null || !i.InvoiceCancellationDispatchLog.Status.HasValue || i.InvoiceCancellationDispatchLog.Status == (int)Naming.GeneralStatus.Failed);
                var details  = logItems
                               .OrderBy(i => i.InvoiceItem.SellerID)
                               .ThenBy(i => i.InvoiceID)
                               .ToArray()
                               .Select(i => new
                {
                    作廢發票號碼 = $"{i.CancellationNo}",
                    作廢日期   = i.CancelDate,
                    開立人統編  = i.InvoiceItem.Organization.ReceiptNo,
                });

                DataTable table = details.ToDataTable();

                table.TableName = "作廢發票未傳送";
                ds.Tables.Add(table);
            }

            void buildAllowanceLogs(DataSet ds)
            {
                var calcAllowance = models.GetTable <InvoiceItem>()
                                    .Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票)
                                    .Join(allowanceItems, i => i.InvoiceID, c => c.InvoiceID, (i, c) => c);

                var logItems = calcAllowance.Where(i => i.InvoiceAllowanceDispatchLog == null || !i.InvoiceAllowanceDispatchLog.Status.HasValue || i.InvoiceAllowanceDispatchLog.Status == (int)Naming.GeneralStatus.Failed);
                var details  = logItems
                               .OrderBy(i => i.InvoiceAllowanceSeller.SellerID)
                               .ThenBy(i => i.AllowanceID)
                               .ToArray()
                               .Select(i => new
                {
                    折讓單號碼 = i.AllowanceNumber,
                    發票號碼  = $"{i.InvoiceItem?.TrackCode}{i.InvoiceItem?.No}",
                    折讓日期  = i.AllowanceDate,
                    開立人統編 = i.InvoiceAllowanceSeller.ReceiptNo,
                });

                DataTable table = details.ToDataTable();

                table.TableName = "折讓單未傳送";
                ds.Tables.Add(table);
            }

            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AppendCookie(new HttpCookie("fileDownloadToken", viewModel.FileDownloadToken));
            Response.AddHeader("Cache-control", "max-age=1");
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}({1:yyyy-MM-dd HH-mm-ss}).xlsx", HttpUtility.UrlEncode("IncompleteTurnkeyLogs"), DateTime.Now));

            using (DataSet ds = new DataSet())
            {
                buildInvoiceLogs(ds);
                buildInvoiceCancellationLogs(ds);
                buildAllowanceLogs(ds);

                using (var xls = ds.ConvertToExcel())
                {
                    xls.SaveAs(Response.OutputStream);
                }
            }

            return(new EmptyResult());
        }
Exemple #24
0
 public ActionResult InquireInvoiceDispatchLog(InvoiceQueryViewModel viewModel)
 {
     return(View("~/Views/Invoice/Module/InvoiceDispatchLogSummary.cshtml", viewModel));
 }
Exemple #25
0
        public ActionResult InquireInvoice(InvoiceQueryViewModel viewModel)
        {
            IQueryable <InvoiceItem> items        = models.GetTable <InvoiceItem>().Where(i => i.InvoiceType == (int)Naming.InvoiceTypeDefinition.一般稅額計算之電子發票);
            IQueryable <Payment>     paymentItems = models.GetTable <Payment>();

            var profile = HttpContext.GetUser();

            bool hasConditon = false;

            if (viewModel.InvoiceID != null && viewModel.InvoiceID.Length > 0)
            {
                items = items.Where(i => viewModel.InvoiceID.Contains(i.InvoiceID));
            }

            viewModel.InvoiceNo = viewModel.InvoiceNo.GetEfficientString();
            if (viewModel.InvoiceNo != null)
            {
                if (Regex.IsMatch(viewModel.InvoiceNo, "[A-Za-z]{2}[0-9]{8}"))
                {
                    String trackCode = viewModel.InvoiceNo.Substring(0, 2).ToUpper();
                    String no        = viewModel.InvoiceNo.Substring(2);
                    items = items.Where(c => c.TrackCode == trackCode &&
                                        c.No == no);
                    hasConditon = true;
                }
                else
                {
                    ModelState.AddModelError("InvoiceNo", "請輸入正確發票號碼!!");
                }
            }

            if (viewModel.DispatchStatus.HasValue)
            {
                items = items
                        .Join(models.GetTable <InvoiceItemDispatchLog>().Where(d => d.Status == viewModel.DispatchStatus),
                              i => i.InvoiceID, d => d.InvoiceID, (i, d) => i);
            }

            if (!hasConditon)
            {
                if (viewModel.BranchID.HasValue)
                {
                    hasConditon  = true;
                    paymentItems = paymentItems.Where(c => c.PaymentTransaction.BranchID == viewModel.BranchID);
                }
            }

            if (!hasConditon)
            {
                if (viewModel.HandlerID.HasValue)
                {
                    hasConditon  = true;
                    paymentItems = paymentItems.Where(c => c.HandlerID == viewModel.HandlerID);
                }
            }

            if (!hasConditon)
            {
                if (profile.IsAssistant() || profile.IsAccounting() || profile.IsOfficer())
                {
                }
                else if (profile.IsManager() || profile.IsViceManager())
                {
                    var branches = models.GetTable <BranchStore>().Where(b => b.ManagerID == profile.UID || b.ViceManagerID == profile.UID);
                    paymentItems = paymentItems
                                   .Join(models.GetTable <PaymentTransaction>()
                                         .Join(branches, p => p.BranchID, b => b.BranchID, (p, b) => p),
                                         c => c.PaymentID, h => h.PaymentID, (c, h) => c);
                }
                else if (profile.IsCoach())
                {
                    paymentItems = paymentItems.Where(c => c.HandlerID == profile.UID);
                }
                else
                {
                    items = items.Where(p => false);
                }
            }

            if (viewModel.IsPrinted.HasValue)
            {
                if (viewModel.IsPrinted == true)
                {
                    items = items.Where(i => i.Document.DocumentPrintLog.Count > 0);
                }
                else if (viewModel.IsPrinted == false)
                {
                    items = items.Where(i => i.Document.DocumentPrintLog.Count == 0);
                }
            }

            if (viewModel.InvoiceType.HasValue)
            {
                items = items.Where(c => c.InvoiceType == (byte)viewModel.InvoiceType);
            }

            if (viewModel.DateFrom.HasValue && viewModel.DocType == Naming.DocumentTypeDefinition.E_Invoice)
            {
                items = items.Where(c => c.InvoiceDate >= viewModel.DateFrom);
            }

            if (viewModel.DateTo.HasValue && viewModel.DocType == Naming.DocumentTypeDefinition.E_Invoice)
            {
                items = items.Where(c => c.InvoiceDate < viewModel.DateTo.Value.AddDays(1));
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = this.ModelState;
                return(View("~/Views/Shared/ReportInputError.ascx"));
            }

            if (viewModel.DocType == Naming.DocumentTypeDefinition.E_Allowance)
            {
                IQueryable <InvoiceAllowance> allowanceItems = models.GetTable <InvoiceAllowance>();

                if (viewModel.DateFrom.HasValue)
                {
                    allowanceItems = allowanceItems.Where(c => c.AllowanceDate >= viewModel.DateFrom);
                }

                if (viewModel.DateTo.HasValue)
                {
                    allowanceItems = allowanceItems.Where(c => c.AllowanceDate < viewModel.DateTo.Value.AddDays(1));
                }

                items        = items.Join(allowanceItems, i => i.InvoiceID, a => a.InvoiceID, (i, a) => i);
                paymentItems = paymentItems.Join(items, p => p.InvoiceID, i => i.InvoiceID, (p, i) => p);

                return(View("~/Views/Invoice/Module/AllowanceItemList.ascx", paymentItems));
            }
            else
            {
                paymentItems = paymentItems.Join(items, p => p.InvoiceID, i => i.InvoiceID, (p, i) => p);

                return(View("~/Views/Invoice/Module/InvoiceItemList.ascx", paymentItems));
            }
        }
Exemple #26
0
 public ActionResult AllowanceIndex(InvoiceQueryViewModel viewModel)
 {
     return(View("AllowanceIndex", models.GetTable <Payment>().Where(p => false)));
 }
Exemple #27
0
 public ActionResult TurnkeyIndex(InvoiceQueryViewModel viewModel)
 {
     ViewBag.ViewModel = viewModel;
     return(View(viewModel));
 }