update old save this project

master
嘉祥 詹 2024-09-13 14:22:14 +08:00
parent 0b95afb125
commit b13121360f
5 changed files with 245 additions and 6 deletions

View File

@ -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<quotation>("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<quotation, quotation>();
});
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<quotationMainItem> quotationMainItems = new List<quotationMainItem>();
List<quotationSubItem> quotationSubItems = new List<quotationSubItem>();
List<payment> payments = new List<payment>();
List<invoice> invoices = new List<invoice>();
List<quotationMainItem> old_quotationMainItems = conn.Query<quotationMainItem>("select * from quotationMainItem where quotation_uid = @quotation_uid and quotationMainItem_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList();
List<payment> old_payments = conn.Query<payment>("select * from payment where quotation_uid = @quotation_uid and payment_version = @quotation_version", new { quotation_uid = quotation_uid, quotation_version = quotation_version }).ToList();
List<invoice> old_invoices = conn.Query<invoice>("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<quotationMainItem, quotationMainItem>();
});
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<quotationSubItem> old_quotationSubItems = conn.Query<quotationSubItem>("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<quotationSubItem, quotationSubItem>();
});
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<payment, payment>();
});
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<invoice, invoice>();
});
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<quotationView>("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();

View File

@ -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";

View File

@ -43,10 +43,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="Dapper.Contrib" Version="2.0.78" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NPOI" Version="2.7.0" />
<PackageReference Include="NPOI" Version="2.7.1" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
</ItemGroup>

View File

@ -724,6 +724,7 @@
<!-- .modal-body -->
<div class="modal-body">
<input type="hidden" id="save_to_same_quotation_uid" />
<input type="hidden" id="save_to_same_quotation_version" />
<div class="form-label-group">
<input type="text" id="save_to_same_quotation_name" class="form-control" value="" placeholder="新報價單名稱" maxlength="45" required=""> <label for="save_to_same_quotation_name">新報價單名稱</label>
</div>

View File

@ -1028,6 +1028,53 @@ $(document).ready(function () {
}
});
});
//另存報價單儲存鈕
$('#save_to_same_SaveBtn').on('click', function () {
var quotation_uid = $('#save_to_same_quotation_uid').val();
var quotation_version = $('#save_to_same_quotation_version').val();
var quotation_name = $('#save_to_same_quotation_name').val();
if (quotation_name == '') {
alert('請輸入新的報價單名稱!');
return;
}
var formData = {
quotation_uid: quotation_uid,
quotation_version: quotation_version,
quotation_name: quotation_name,
method: 'save_to_same'
}
$.ajax({
url: "/Api/saveas",
type: "post",
data: formData,
success: function (data, textStatus, jqXHR) {
if (data.ret == "yes") {
obj = data.quotationView;
quotationTable.fnAddData(obj);
alert('另存至本專案為新報價單完成!');
$('#clientSaveToSameModal').modal('toggle');
$('#clientHistoryListModal').modal('toggle');
} else {
alert(data.message);
if (data.err_code == "99999") {
location.href = "/Root/Login";
}
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert('網路或伺服器發生錯誤,請稍後重試!');
}
});
});
});
function loadContactPersion() {
@ -1110,14 +1157,15 @@ function buttonHistoryClick(obj) {
var quotation_uid = obj.getAttribute('data-uid');
var quotation_version = obj.getAttribute('data-version');
historyRowID = $('#history_' + quotation_uid);
historyRowID = $('#history_' + quotation_version + '_' + quotation_uid);
historyRowPos = historyTable.fnGetPosition($('#history_' + quotation_uid)[0]);
historyRowPos = historyTable.fnGetPosition($('#history_' + quotation_version + '_' + quotation_uid)[0]);
var quotation_row = historyDataTable.row(historyRowPos).data();
if (type == 'save_in_same') {
$('#save_to_same_quotation_uid').val(quotation_uid);
$('#save_to_same_quotation_version').val(quotation_version);
$('#save_to_same_quotation_name').val(quotation_row.quotation_name + ' - Copy').trigger('change');
$('#clientSaveToSameModal').modal('toggle');
}
@ -1747,7 +1795,7 @@ function loadHistoryTable() {
},
autoWidth: false,
rowId: function (row) {
return 'history_' + row.quotation_uid;
return 'history_' + row.quotation_version + '_' + row.quotation_uid;
},
deferRender: true,
initComplete: function () {
@ -1914,7 +1962,7 @@ function loadQuotationTable() {
searching: true,
columns: [
{ data: 'quotation_name', className: 'align-top text-left', orderable: true, searchable: true },
{ data: 'quotation_date', className: 'align-top text-left', orderable: true, searchable: true },
{ data: 'quotation_createdate', className: 'align-top text-left', orderable: true, searchable: true },
{ data: 'contactPerson_name', className: 'align-top text-left', orderable: true, searchable: true },
{ data: 'quotation_uid', className: 'align-top text-center', orderable: false, searchable: false }
],
@ -1931,15 +1979,28 @@ function loadQuotationTable() {
return row.quotation_name;
}
},
{
targets: 1,
className: 'align-middle text-left',
orderable: false,
searchable: true,
render: function render(data, type, row, meta) {
return (new Date(row.quotation_createdate)).format("yyyy/MM/dd hh:mm:ss");
//return '<a href="javascript: void(0);" data-uid="' + row.quotation_uid + '" data-version="' + row.quotation_version + '" data-method="preview" >' + row.quotation_name + '</a>';
//return row.quotation_name;
}
},
{
targets: 3,
orderable: false,
searchable: false,
render: function render(data, type, row, meta) {
var ret = '';
ret += '<button type="button" data-uid="' + row.quotation_uid + '" data-version="' + row.quotation_version + '" data-method="history" class="btn btn-sm btn-icon btn-secondary" ><i class="oi oi-list"></i> <span class="sr-only">History</span></button>';
ret += '<button type="button" data-uid="' + row.quotation_uid + '" data-version="' + row.quotation_version + '" data-method="edit" class="btn btn-sm btn-icon btn-secondary" ><i class="fa fa-pencil-alt"></i> <span class="sr-only">Edit</span></button>';
ret += '<button type="button" data-uid="' + row.quotation_uid + '" data-version="' + row.quotation_version + '" data-method="del" class="btn btn-sm btn-icon btn-secondary"><i class="far fa-trash-alt"></i> <span class="sr-only">Remove</span></button>';
ret += '<button type="button" data-uid="' + row.quotation_uid + '" data-version="' + row.quotation_version + '" data-method="history" class="btn btn-sm btn-icon btn-secondary" ><i class="oi oi-list"></i> <span class="sr-only">History</span></button>';
return ret;
}
}