public object Save([FromBody] ReceiptsJson json) { try { var newReceipt = AccountReceiptsMdl.Save(json); return(new { state = true, message = "Account Receipt(s) successfully Saved", data = new { newReceipt.ARH_SYS_ID, newReceipt.ARH_STATUS } }); } catch (Exception e) { return(new { state = false, message = "Server Error", exception = e }); } }
public static MS_ACT_RECEIPTS_HEAD Save(ReceiptsJson json) { var db = new SibaModel(); using (var trans = db.Database.BeginTransaction()) { var receipt = json.MS_ACT_RECEIPTS_HEAD; try { var dbReceipt = db.MS_ACT_RECEIPTS_HEAD.Find(receipt.ARH_SYS_ID); switch (receipt.ARH_STATUS) { case "A": if (dbReceipt != null) { db.MS_ACT_RECEIPTS_HEAD.Attach(dbReceipt); dbReceipt.Map(receipt); dbReceipt.ARH_MOD_DATE = DateTime.Now; //receipts details processing foreach (var rDetails in receipt.MS_ACCT_RECEIPTS_DTLS) { var dbDetails = db.MS_ACCT_RECEIPTS_DTLS.Find(rDetails.ARD_SYS_ID); switch (rDetails.ARD_STATUS) { case "A": //we have a record in the database which we have to update if (dbDetails != null) { db.MS_ACCT_RECEIPTS_DTLS.Attach(dbDetails); dbDetails.Map(rDetails); dbDetails.ARD_MOD_DATE = DateTime.Now; //receipts account details processing foreach (var aDetails in rDetails.MS_ACCT_RCPT_ACNT_DTLS) { var dbAcntDetails = db.MS_ACCT_RCPT_ACNT_DTLS.Find(aDetails.RAD_SYS_ID); switch (aDetails.RAD_STATUS) { case "A": //we have a record in the database which we have to update if (dbAcntDetails != null) { db.MS_ACCT_RCPT_ACNT_DTLS.Attach(dbAcntDetails); dbAcntDetails.Map(aDetails); dbAcntDetails.RAD_MOD_DATE = DateTime.Now; } break; case "U": //add new record to save aDetails.RAD_ARD_SYS_ID = rDetails.ARD_SYS_ID; aDetails.RAD_STATUS = "A"; aDetails.RAD_CRTE_DATE = DateTime.Now; db.MS_ACCT_RCPT_ACNT_DTLS.Add(aDetails); break; case "D": if (dbAcntDetails != null) { db.MS_ACCT_RCPT_ACNT_DTLS.Attach(dbAcntDetails); dbAcntDetails.RAD_STATUS = "D"; dbAcntDetails.RAD_MOD_DATE = DateTime.Now; } break; } } } break; case "U": //add new record to save rDetails.ARD_ARH_SYS_ID = receipt.ARH_SYS_ID; rDetails.ARD_STATUS = "A"; rDetails.ARD_CRTE_DATE = DateTime.Now; rDetails.MS_ACCT_RCPT_ACNT_DTLS.ForEach(x => x.RAD_STATUS = "A"); db.MS_ACCT_RECEIPTS_DTLS.Add(rDetails); break; case "D": if (dbDetails != null) { db.MS_ACCT_RECEIPTS_DTLS.Attach(dbDetails); dbDetails.ARD_STATUS = "D"; dbDetails.ARD_MOD_DATE = DateTime.Now; } break; } //receipt details open entry adjusted amount var totalAdjAmnt = json.ACCT_TXN_OPEN_ENTRY.Where(x => x.OE_TXN_REF_ID == rDetails.ARD_SYS_ID.ToString()).ToList().Sum(x => x.OE_UNPOST_ADJ_FC_AMT); foreach (var oe in db.ACCT_TXN_OPEN_ENTRY.Where(x => x.OE_TXN_REF_ID == rDetails.ARD_SYS_ID.ToString())) { db.ACCT_TXN_OPEN_ENTRY.Attach(oe); oe.OE_UNPOST_ADJ_FC_AMT = totalAdjAmnt; } } //update open entry tables with matching details json.ACCT_TXN_OPEN_ENTRY.ForEach(oe => { var dbOpenEntry = db.ACCT_TXN_OPEN_ENTRY.Find(oe.OE_SYS_ID); db.ACCT_TXN_OPEN_ENTRY.Attach(dbOpenEntry); dbOpenEntry.Map(oe); }); //open entry matching processing json.ACCT_OPEN_ENTRY_MATCH_DETL.ForEach(md => { var dbMatchDetail = db.ACCT_OPEN_ENTRY_MATCH_DETL.Find(md.MA_SYS_ID); switch (md.MA_STATUS) { case "A": if (dbMatchDetail != null) { db.ACCT_OPEN_ENTRY_MATCH_DETL.Attach(dbMatchDetail); dbMatchDetail.Map(md); } break; case "U": md.MA_STATUS = "A"; md.MA_CRTE_DATE = DateTime.Now; db.ACCT_OPEN_ENTRY_MATCH_DETL.Add(md); break; case "D": if (dbMatchDetail != null) { db.ACCT_OPEN_ENTRY_MATCH_DETL.Remove(dbMatchDetail); } break; } }); } break; case "U": receipt.ARH_STATUS = "A"; receipt.ARH_CRTE_DATE = DateTime.Now; receipt.MS_ACCT_RECEIPTS_DTLS.ForEach(x => { x.ARD_STATUS = "A"; x.ARD_CRTE_DATE = DateTime.Now; x.MS_ACCT_RCPT_ACNT_DTLS.ForEach(a => a.RAD_STATUS = "A"); }); // receipt.MS_ACCT_RCPT_ACNT_DTLS.ForEach(x => { x.RAD_STATUS = "A"; x.RAD_CRTE_DATE = DateTime.Now; }); db.MS_ACT_RECEIPTS_HEAD.Add(receipt); db.SaveChanges(); receipt.MS_ACCT_RECEIPTS_DTLS.ForEach(r => { db.ACCT_TXN_OPEN_ENTRY.Add(new ACCT_TXN_OPEN_ENTRY { OE_TXN_REF_ID = r.ARD_SYS_ID.ToString(), OE_R_BATCH_ID = receipt.ARH_BATCH_NO.ToString(), OE_DOC_TYPE = receipt.ARH_ATD_CODE, OE_DOC_NO = r.ARD_TXN_DOC_NO, OE_LINE_NO = null, OE_DOC_DATE = r.ARD_DUE_DATE, OE_DUE_DATE = r.ARD_DUE_DATE, OE_CUST_CODE = "CT1", OE_MAIN_ACCT_CODE = "MAIN01", OE_SUB_ACCT_CODE = "CT1", OE_DR_CR = "DR", OE_OFFICE_CODE = r.ARD_TXN_OFF_CODE, OE_CURR_CODE = "GHS", OE_CURR_RATE = 4, OE_ORGNL_FC_AMT = 200, OE_ORGNL_BC_AMT = 800, OE_ADJ_FC_AMT = null, OE_ADJ_BC_AMT = null, OE_UNPOST_ADJ_FC_AMT = null, OE_UNPOST_ADJ_BC_AMT = null, OE_ACCT_YEAR = (short)r.ARD_DUE_DATE.Value.Year, OE_DOC_CAL_MONTH = (byte)r.ARD_DUE_DATE.Value.Month, OE_CRTE_BY = "System", OE_CRTE_DATE = DateTime.Now, }); //// }); break; case "D": if (dbReceipt != null) { db.MS_ACT_RECEIPTS_HEAD.Attach(receipt); dbReceipt.ARH_STATUS = "D"; dbReceipt.ARH_MOD_DATE = DateTime.Now; } break; } db.SaveChanges(); trans.Commit(); return(receipt); } catch (Exception) { trans.Rollback(); throw; } } }