diff --git a/Controllers/ApiController.cs b/Controllers/ApiController.cs index bbf5e069..d72b9814 100644 --- a/Controllers/ApiController.cs +++ b/Controllers/ApiController.cs @@ -10,6 +10,9 @@ using Org.BouncyCastle.Bcpg.OpenPgp; using NPOI.OpenXmlFormats.Shared; using NPOI.SS.Formula.PTG; using System.Data; +using System; +using AutoMapper; +using Org.BouncyCastle.Asn1.X509; namespace QuotationMaker.Controllers { @@ -29,6 +32,170 @@ namespace QuotationMaker.Controllers } + [Route("saveas")] + public ActionResult SaveAs(IFormCollection obj) { + saveasResult ret = new saveasResult(); + + authToken token = new authToken(this._httpContextAccessor); + if (token.user_isLogin == false) + { + HttpContext.Response.Cookies.Delete("token_key"); + ret.ret = "no"; + ret.err_code = "99999"; + ret.message = "非登入狀態!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string quotation_uid = obj["quotation_uid"].ToString(); + string quotation_name = obj["quotation_name"].ToString(); + string quotation_version = obj["quotation_version"].ToString(); + string project_uid = obj["project_uid"].ToString(); + string method = obj["method"].ToString(); + + if (method == "save_to_same") { + quotation oldQuotation = conn.QueryFirstOrDefault("select * from quotation where quotation_isdel = 'N' and quotation_uid = @quotation_uid and quotation_version = @quotation_version ", new { quotation_uid = quotation_uid, quotation_version = quotation_version }); + + if (oldQuotation == null) { + ret.ret = "no"; + ret.err_code = "0005"; + ret.message = "無此版本號的 quotation_uid 資料!"; + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + string new_quotation_uid = "q_" + GlobalClass.CreateRandomCode(24); + + var config = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapper = config.CreateMapper(); + quotation quotation = new quotation(); + + mapper.Map(oldQuotation, quotation); + + quotation.quotation_uid = new_quotation_uid; + quotation.quotation_name = quotation_name; + quotation.quotation_log = "由 [" + oldQuotation.quotation_name + "] 此報價單另存產生!"; + quotation.quotation_version = 1; + quotation.quotation_createdate = DateTime.Now; + quotation.quotation_modifydate = DateTime.Now; + quotation.quotation_create_uid = token.user_uid; + quotation.quotation_modify_uid = token.user_uid; + quotation.quotation_revoke = "N"; + + List quotationMainItems = new List(); + List quotationSubItems = new List(); + List payments = new List(); + List invoices = new List(); + + List old_quotationMainItems = conn.Query("select * from quotationMainItem where quotation_uid = @quotation_uid and quotationMainItem_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + List old_payments = conn.Query("select * from payment where quotation_uid = @quotation_uid and payment_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + List old_invoices = conn.Query("select * from invoice where quotation_uid = @quotation_uid and invoice_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList(); + + //主項目複製 + foreach (quotationMainItem item in old_quotationMainItems) { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + quotationMainItem quotationMainItem = new quotationMainItem(); + + mapperItem.Map(item, quotationMainItem); + + quotationMainItem.quotation_uid = new_quotation_uid; + quotationMainItem.quotationMainItem_version = 1; + quotationMainItem.quotationMainItem_revoke = "N"; + quotationMainItem.quotationMainItem_uid = "qm_" + GlobalClass.CreateRandomCode(24); + quotationMainItem.quotationMainItem_createdate = DateTime.Now; + quotationMainItem.quotationMainItem_modifydate = DateTime.Now; + + quotationMainItems.Add(quotationMainItem); + + List old_quotationSubItems = conn.Query("select * from quotationSubItem where quotation_uid = @quotation_uid and quotationSubItem_version = @quotation_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotation_uid = quotation_uid, quotation_version = quotation_version, quotationMainItem_uid = item.quotationMainItem_uid }).ToList(); + + foreach (quotationSubItem subItem in old_quotationSubItems) + { + var configSubItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperSubItem = configSubItem.CreateMapper(); + + quotationSubItem quotationSubItem = new quotationSubItem(); + + mapperSubItem.Map(subItem, quotationSubItem); + + quotationSubItem.quotationMainItem_uid = quotationMainItem.quotationMainItem_uid; + quotationSubItem.quotation_uid = new_quotation_uid; + quotationSubItem.quotationSubItem_version = 1; + quotationSubItem.quotationSubItem_uid = "qs_" + GlobalClass.CreateRandomCode(24); + quotationSubItem.quotationSubItem_createdate = DateTime.Now; + quotationSubItem.quotationSubItem_modifydate = DateTime.Now; + + quotationSubItems.Add(quotationSubItem); + } + + } + + foreach (payment item in old_payments) { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + payment paymentItem = new payment(); + + mapperItem.Map(item, paymentItem); + + paymentItem.payment_uid = "pay_" + GlobalClass.CreateRandomCode(24); + paymentItem.quotation_uid = new_quotation_uid; + paymentItem.payment_version = 1; + paymentItem.payment_createdate = DateTime.Now; + paymentItem.payment_modifydate = DateTime.Now; + + payments.Add(paymentItem); + } + + foreach (invoice item in old_invoices) { + var configItem = new MapperConfiguration(cfg => + { + cfg.CreateMap(); + }); + var mapperItem = configItem.CreateMapper(); + + invoice invoiceItem = new invoice(); + + mapperItem.Map(item, invoiceItem); + + invoiceItem.invoice_uid = "inv_" + GlobalClass.CreateRandomCode(24); + invoiceItem.invoice_version = 1; + invoiceItem.invoice_revoke = "N"; + invoiceItem.quotation_uid = new_quotation_uid; + + invoices.Add(invoiceItem); + + } + + conn.Insert(invoices); + conn.Insert(payments); + conn.Insert(quotationSubItems); + conn.Insert(quotationMainItems); + conn.Insert(quotation); + + ret.ret = "yes"; + ret.quotationView = conn.QueryFirstOrDefault("select * from quotationView where quotation_isdel = 'N' and quotation_revoke = 'N' and quotation_uid = @quotation_uid", new { quotation_uid = new_quotation_uid }); + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + } + + return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8"); + + } + [Route("getHistoryList")] public ActionResult GetHistoryList(IFormCollection obj) { quotationViewListResult ret = new quotationViewListResult(); diff --git a/Modals/resultClass.cs b/Modals/resultClass.cs index 9beb552b..81c12069 100644 --- a/Modals/resultClass.cs +++ b/Modals/resultClass.cs @@ -4,6 +4,15 @@ using Dapper; using static DbTableClass; public class resultClass { + public class saveasResult + { + public string ret = "no"; + public string err_code = "0000"; + public string message = ""; + public quotationView quotationView = new quotationView(); + public projectView projectView = new projectView(); + } + public class quotationDetailResult { public string ret = "no"; diff --git a/QuotationMaker.csproj b/QuotationMaker.csproj index 075f75da..2f2873be 100644 --- a/QuotationMaker.csproj +++ b/QuotationMaker.csproj @@ -43,10 +43,11 @@ + - + diff --git a/Views/Home/ProjectList.cshtml b/Views/Home/ProjectList.cshtml index b6e36b24..bc487d39 100644 --- a/Views/Home/ProjectList.cshtml +++ b/Views/Home/ProjectList.cshtml @@ -724,6 +724,7 @@