forked from dk96/QuotationMaker
updates
parent
f5202459fa
commit
b0fd635c98
|
|
@ -28,6 +28,134 @@ namespace QuotationMaker.Controllers
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("addEditDelQuotation")]
|
||||||
|
public ActionResult AddEditDelQuotation(IFormCollection obj) {
|
||||||
|
quotationDetailResult ret = new quotationDetailResult();
|
||||||
|
|
||||||
|
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 method = obj["method"].ToString();
|
||||||
|
string dept_uid = obj["dept_uid"].ToString();
|
||||||
|
string project_uid = obj["project_uid"].ToString();
|
||||||
|
string quotation_uid = obj["quotation_uid"].ToString();
|
||||||
|
string quotation_version = obj["quotation_version"].ToString();
|
||||||
|
string quotation_prodMethod = obj["quotation_prodMethod"].ToString();
|
||||||
|
string quotation_date = obj["quotation_date"].ToString();
|
||||||
|
string quotation_expStart = obj["quotation_expStart"].ToString();
|
||||||
|
string quotation_expEnd = obj["quotation_expEnd"].ToString();
|
||||||
|
string quotation_name = obj["quotation_name"].ToString();
|
||||||
|
string contactPerson_uid = obj["contactPerson_uid"].ToString();
|
||||||
|
string company_uid = obj["company_uid"].ToString();
|
||||||
|
string quotation_log = obj["quotation_log"].ToString();
|
||||||
|
string quotation_noTaxTotal = obj["quotation_noTaxTotal"].ToString();
|
||||||
|
string quotation_specTotal = obj["quotation_specTotal"].ToString();
|
||||||
|
string quotation_tax = obj["quotation_tax"].ToString();
|
||||||
|
string quotation_grandTotal = obj["quotation_grandTotal"].ToString();
|
||||||
|
string quotation_sa = obj["quotation_sa"].ToString();
|
||||||
|
string mainItems_jsonstr = obj["mainItems"].ToString();
|
||||||
|
string payments_jsonstr = obj["payments"].ToString();
|
||||||
|
string invoices_jsonstr = obj["invoices"].ToString();
|
||||||
|
|
||||||
|
if (method == "add") {
|
||||||
|
quotation objQuotation = new quotation();
|
||||||
|
|
||||||
|
quotation_log = "報價單資料成立";
|
||||||
|
quotation_uid = "q_" + GlobalClass.CreateRandomCode(24);
|
||||||
|
quotation_version = "1";
|
||||||
|
objQuotation.quotation_uid = quotation_uid;
|
||||||
|
objQuotation.quotation_version = int.Parse(quotation_version);
|
||||||
|
objQuotation.dept_uid = dept_uid;
|
||||||
|
objQuotation.quotation_prodMethod = quotation_prodMethod;
|
||||||
|
objQuotation.quotation_date = quotation_date;
|
||||||
|
objQuotation.quotation_expStart = quotation_expStart;
|
||||||
|
objQuotation.quotation_expEnd= quotation_expEnd;
|
||||||
|
objQuotation.quotation_name = quotation_name;
|
||||||
|
objQuotation.project_uid = project_uid;
|
||||||
|
objQuotation.contactPerson_uid = contactPerson_uid;
|
||||||
|
objQuotation.company_uid = company_uid;
|
||||||
|
objQuotation.quotation_log = quotation_log;
|
||||||
|
objQuotation.quotation_create_uid = token.user_uid;
|
||||||
|
objQuotation.quotation_modify_uid = token.user_uid;
|
||||||
|
objQuotation.quotation_noTaxTotal = double.Parse(quotation_noTaxTotal);
|
||||||
|
objQuotation.quotation_specTotal = double.Parse(quotation_specTotal);
|
||||||
|
objQuotation.quotation_tax = double.Parse(quotation_tax);
|
||||||
|
objQuotation.quotation_grandTotal = double.Parse(quotation_grandTotal);
|
||||||
|
objQuotation.quotation_sa = quotation_sa;
|
||||||
|
objQuotation.quotation_createdate = DateTime.Now;
|
||||||
|
objQuotation.quotation_modifydate = DateTime.Now;
|
||||||
|
|
||||||
|
dynamic mainItems_Json;
|
||||||
|
dynamic payments_Json;
|
||||||
|
dynamic invoices_Json;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mainItems_Json = JsonConvert.DeserializeObject(mainItems_jsonstr);
|
||||||
|
payments_Json = JsonConvert.DeserializeObject(payments_jsonstr);
|
||||||
|
invoices_Json = JsonConvert.DeserializeObject(invoices_jsonstr);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
ret.ret = "no";
|
||||||
|
ret.err_code = "0003";
|
||||||
|
ret.message = "mainItems or payments or invoices json error," + ex.Message;
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<quotationMainItem> quotationMainItems = new List<quotationMainItem>();
|
||||||
|
List<quotationSubItem> quotationSubItems = new List<quotationSubItem>();
|
||||||
|
|
||||||
|
foreach (dynamic item in mainItems_Json) {
|
||||||
|
string quotationMainItem_uid = "qm_" + GlobalClass.CreateRandomCode(24);
|
||||||
|
|
||||||
|
quotationMainItem newItem = new quotationMainItem();
|
||||||
|
newItem.quotation_uid = quotation_uid;
|
||||||
|
newItem.mainItem_uid = item.mainItem_uid;
|
||||||
|
newItem.quotationMainItem_uid = quotationMainItem_uid;
|
||||||
|
newItem.quotationMainItem_name = item.quotationMainItem_name;
|
||||||
|
newItem.quotationMainItem_ac = double.Parse(item.quotationMainItem_ac);
|
||||||
|
newItem.quotationMainItem_subTotal = double.Parse(item.quotationMainItem_subTotal);
|
||||||
|
newItem.quotationMainItem_revoke = "N";
|
||||||
|
newItem.quotationMainItem_version = int.Parse(quotation_version);
|
||||||
|
|
||||||
|
quotationMainItems.Add(newItem);
|
||||||
|
|
||||||
|
foreach (dynamic subItem in item.subitems) {
|
||||||
|
quotationSubItem newSubItem = new quotationSubItem();
|
||||||
|
newSubItem.quotationSubItem_uid = "qs" +GlobalClass.CreateRandomCode(24);
|
||||||
|
newSubItem.quotationMainItem_uid = quotationMainItem_uid;
|
||||||
|
newSubItem.quotation_uid = quotation_uid;
|
||||||
|
newSubItem.subItem_uid = subItem.subItem_uid;
|
||||||
|
newSubItem.quotationSubItem_name = subItem.subItem_name;
|
||||||
|
newSubItem.quotationSubItem_descript = subItem.subItem_descript;
|
||||||
|
newSubItem.quotationSubItem_price = double.Parse(subItem.subItem_price);
|
||||||
|
newSubItem.quotationSubItem_unitType = subItem.quotationSubItem_unitType;
|
||||||
|
newSubItem.quotationSubItem_number = double.Parse(subItem.quotationSubItem_number);
|
||||||
|
newSubItem.quotationSubItem_subTotal = double.Parse(subItem.quotationSubItem_subTotal);
|
||||||
|
newSubItem.quotationSubItem_hasAC = subItem.quotationSubItem_hasAC;
|
||||||
|
newSubItem.quotationSubItem_revoke = "N";
|
||||||
|
newSubItem.quotationSubItem_version = int.Parse(quotation_version);
|
||||||
|
|
||||||
|
quotationSubItems.Add(newSubItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return Content(JsonConvert.SerializeObject(ret), "application/json;charset=utf-8");
|
||||||
|
}
|
||||||
|
|
||||||
[Route("getModelQuotation")]
|
[Route("getModelQuotation")]
|
||||||
public ActionResult AddEditDelGetModelQuotation(IFormCollection obj)
|
public ActionResult AddEditDelGetModelQuotation(IFormCollection obj)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,15 @@ using Dapper;
|
||||||
using static DbTableClass;
|
using static DbTableClass;
|
||||||
public class resultClass
|
public class resultClass
|
||||||
{
|
{
|
||||||
|
public class quotationDetailResult
|
||||||
|
{
|
||||||
|
public string ret = "no";
|
||||||
|
public string err_code = "0000";
|
||||||
|
public string message = "";
|
||||||
|
public quotationDetail quotationDetail = new quotationDetail();
|
||||||
|
public quotationView quotationView = new quotationView();
|
||||||
|
}
|
||||||
|
|
||||||
public class quotationViewListResult
|
public class quotationViewListResult
|
||||||
{
|
{
|
||||||
public string ret = "no";
|
public string ret = "no";
|
||||||
|
|
@ -148,6 +157,60 @@ public class resultClass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class quotationDetail : quotation {
|
||||||
|
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||||
|
|
||||||
|
public List<quotationMainItemDetail> quotationMainItemDetails = new List<quotationMainItemDetail>();
|
||||||
|
public List<payment> payments = new List<payment>();
|
||||||
|
public List<invoice> invoices = new List<invoice>();
|
||||||
|
|
||||||
|
public quotationDetail() { }
|
||||||
|
|
||||||
|
public quotationDetail(quotation objData) {
|
||||||
|
Type projectType = objData.GetType();
|
||||||
|
|
||||||
|
foreach (var prop in projectType.GetProperties())
|
||||||
|
{
|
||||||
|
string propName = prop.Name;
|
||||||
|
var valueProperty = projectType.GetProperty(propName);
|
||||||
|
object propValue = valueProperty.GetValue(objData, null);
|
||||||
|
|
||||||
|
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<quotationMainItem> quotationMainItems = conn.Query<quotationMainItem>("select * from quotationMainItem where quotationSubItem_version = @quotationSubItem_version and quotation_uid = @quotation_uid ", new { quotationSubItem_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||||
|
|
||||||
|
foreach (quotationMainItem qItem in quotationMainItems) {
|
||||||
|
quotationMainItemDetails.Add(new quotationMainItemDetail(qItem));
|
||||||
|
}
|
||||||
|
|
||||||
|
payments = conn.Query<payment>("select * from payment where payment_version = @payment_version and quotation_uid = @quotation_uid ", new { payment_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||||
|
invoices = conn.Query<invoice>("select * from invoice where invoice_version = @invoice_version and quotation_uid = @quotation_uid ", new { invoice_version = this.quotation_version, quotation_uid = this.quotation_uid }).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class quotationMainItemDetail : quotationMainItem {
|
||||||
|
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||||
|
public List<quotationSubItem> quotationSubItems = new List<quotationSubItem>();
|
||||||
|
|
||||||
|
public quotationMainItemDetail() { }
|
||||||
|
|
||||||
|
public quotationMainItemDetail(quotationMainItem objData) {
|
||||||
|
Type projectType = objData.GetType();
|
||||||
|
|
||||||
|
foreach (var prop in projectType.GetProperties())
|
||||||
|
{
|
||||||
|
string propName = prop.Name;
|
||||||
|
var valueProperty = projectType.GetProperty(propName);
|
||||||
|
object propValue = valueProperty.GetValue(objData, null);
|
||||||
|
|
||||||
|
this.GetType().GetProperty(propName).SetValue(this, propValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
quotationSubItems = conn.Query<quotationSubItem>("select * from quotationSubItem where quotationSubItem_version = @quotationSubItem_version and quotationMainItem_uid = @quotationMainItem_uid ", new { quotationSubItem_version = this.quotationMainItem_version, quotationMainItem_uid = this.quotationMainItem_uid }).ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class modelQuotationDetail : modelQuotation {
|
public class modelQuotationDetail : modelQuotation {
|
||||||
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
SqlConnection conn = new SqlConnection(GlobalClass.appsettings("ConnectionStrings:SQLConnectionString"));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -400,7 +400,7 @@
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="form-label-group">
|
<div class="form-label-group">
|
||||||
<input type="text" id="quotation_grandTotal" class="form-control" value="" placeholder="總計 Grand Total" maxlength="15" required="" /> <label for="quotation_grandTotal">總計 Grand Total</label>
|
<input type="text" id="quotation_grandTotal" class="form-control" value="" placeholder="總計 Grand Total" maxlength="15" required="" /> <label for="quotation_grandTotal">總計 Grand Total</label>
|
||||||
<input type="hidden" id="總計 Grand Total_old" />
|
<input type="hidden" id="quotation_grandTotal_old" />
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.form-group -->
|
</div><!-- /.form-group -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
|
||||||
|
|
@ -697,7 +697,36 @@ $(document).ready(function () {
|
||||||
var contactPerson_uid = $('#contactPerson_uid').val();
|
var contactPerson_uid = $('#contactPerson_uid').val();
|
||||||
var contactPerson_uid_old = $('#contactPerson_uid_old').val();
|
var contactPerson_uid_old = $('#contactPerson_uid_old').val();
|
||||||
var company_uid = $('#quotation_company_uid').val();
|
var company_uid = $('#quotation_company_uid').val();
|
||||||
|
var quotation_noTaxTotal = $('#quotation_noTaxTotal').val();
|
||||||
|
var quotation_noTaxTotal_old = $('#quotation_noTaxTotal_old').val();
|
||||||
|
var quotation_specTotal = $('#quotation_specTotal').val();
|
||||||
|
var quotation_specTotal_old = $('#quotation_specTotal_old').val();
|
||||||
|
var quotation_tax = $('#quotation_tax').val();
|
||||||
|
var quotation_tax_old = $('#quotation_tax_old').val();
|
||||||
|
var quotation_grandTotal = $('quotation_grandTotal').val();
|
||||||
|
var quotation_grandTotal_old = $('#quotation_grandTotal_old').val();
|
||||||
|
var quotation_sa = $('quotation_sa').val();
|
||||||
|
var quotation_sa_old = $('#quotation_sa_old').val();
|
||||||
|
|
||||||
|
var err_msg = '';
|
||||||
|
|
||||||
|
if (quotation_date == '') {
|
||||||
|
err_msg += '請輸入報價日期!\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_name == '') {
|
||||||
|
err_msg += '請輸入報價單名稱!\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_expStart == '' || quotation_expEnd == '') {
|
||||||
|
err_msg += '請輸入報價有效起訖日期!\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err_msg != '') {
|
||||||
|
alert(err_msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var quotation_log = '';
|
var quotation_log = '';
|
||||||
|
|
||||||
if ($('#quotation_custom').prop('checked') == true) {
|
if ($('#quotation_custom').prop('checked') == true) {
|
||||||
|
|
@ -725,6 +754,26 @@ $(document).ready(function () {
|
||||||
quotation_log += '客戶窗口人選變更\n';
|
quotation_log += '客戶窗口人選變更\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quotation_noTaxTotal != quotation_noTaxTotal_old) {
|
||||||
|
quotation_log += '專案總價由 ' + AppendComma(quotation_noTaxTotal_old) + ' 變更為 ' + AppendComma(quotation_noTaxTotal) + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_specTotal != quotation_specTotal_old) {
|
||||||
|
quotation_log += '專案優惠總價由 ' + AppendComma(quotation_specTotal_old) + ' 變更為 ' + AppendComma(quotation_specTotal) + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_tax != quotation_tax_old) {
|
||||||
|
quotation_log += '加值營業稅由 ' + AppendComma(quotation_tax_old) + ' 變更為 ' + AppendComma(quotation_tax) + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_grandTotal != quotation_grandTotal_old) {
|
||||||
|
quotation_log += '實際總價由 ' + AppendComma(quotation_grandTotal_old) + ' 變更為 ' + AppendComma(quotation_grandTotal) + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quotation_sa != cquotation_sa_old) {
|
||||||
|
quotation_log += '製作及維護服務協議條款內容有所變更\n';
|
||||||
|
}
|
||||||
|
|
||||||
$.each(deledMainItems, function (index, value) {
|
$.each(deledMainItems, function (index, value) {
|
||||||
quotation_log += value.mainItem_msg + '\n';
|
quotation_log += value.mainItem_msg + '\n';
|
||||||
});
|
});
|
||||||
|
|
@ -890,6 +939,8 @@ $(document).ready(function () {
|
||||||
|
|
||||||
var formData = {
|
var formData = {
|
||||||
method: quotation_method,
|
method: quotation_method,
|
||||||
|
project_uid: $('#quotation_project_uid').val(),
|
||||||
|
dept_uid: $('#dept_select').val(),
|
||||||
quotation_uid: quotation_uid,
|
quotation_uid: quotation_uid,
|
||||||
quotation_version: quotation_version,
|
quotation_version: quotation_version,
|
||||||
quotation_prodMethod: quotation_prodMethod,
|
quotation_prodMethod: quotation_prodMethod,
|
||||||
|
|
@ -900,12 +951,52 @@ $(document).ready(function () {
|
||||||
contactPerson_uid: contactPerson_uid,
|
contactPerson_uid: contactPerson_uid,
|
||||||
company_uid: company_uid,
|
company_uid: company_uid,
|
||||||
quotation_log: quotation_log,
|
quotation_log: quotation_log,
|
||||||
mainItems: mainItems,
|
quotation_noTaxTotal: quotation_noTaxTotal,
|
||||||
payments: payments,
|
quotation_specTotal: quotation_specTotal,
|
||||||
invoices: invoices
|
quotation_tax: quotation_tax,
|
||||||
|
quotation_grandTotal: quotation_grandTotal,
|
||||||
|
quotation_sa: quotation_sa,
|
||||||
|
mainItems: JSON.stringify(mainItems),
|
||||||
|
payments: JSON.stringify(payments),
|
||||||
|
invoices: JSON.stringify(invoices)
|
||||||
}
|
}
|
||||||
|
|
||||||
var testflag = 1;
|
if (quotation_log == '' && quotation_method == 'edit') {
|
||||||
|
alert('資料沒有異動,取消儲存!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/Api/addEditDelQuotation",
|
||||||
|
type: "post",
|
||||||
|
data: formData,
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
if (data.ret == "yes") {
|
||||||
|
//var obj = data.projectViews[0];
|
||||||
|
|
||||||
|
if (method == "add") {
|
||||||
|
//projectTable.fnAddData(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (method == "edit") {
|
||||||
|
//projectTable.fnUpdate(obj, projectRowPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//$('#clientProjectModal').modal('toggle');
|
||||||
|
} else {
|
||||||
|
alert(data.message);
|
||||||
|
|
||||||
|
if (data.err_code == "99999") {
|
||||||
|
location.href = "/Root/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
alert('網路或伺服器發生錯誤,請稍後重試!');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue