Пример #1
0
 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 });
     }
 }
Пример #2
0
        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;
                }
            }
        }