コード例 #1
0
        public override bool Approve(int userId, int id, ref object dtoItem, out Library.DTO.Notification notification)
        {
            DTO.ClientPayment dtoClientPayment = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.ClientPayment>();
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            try
            {
                using (ClientPaymentMngEntities context = CreateContext())
                {
                    ClientPayment dbItem = null;
                    if (id == 0)
                    {
                        dbItem = new ClientPayment();
                        context.ClientPayment.Add(dbItem);
                    }
                    else
                    {
                        dbItem = context.ClientPayment.FirstOrDefault(o => o.ClientPaymentID == id);
                    }

                    if (dbItem == null)
                    {
                        throw new Exception("Payment not found!");
                    }
                    dbItem.IsConfirmed   = true;
                    dbItem.ConfirmedDate = DateTime.Now;
                    dbItem.ConfirmedBy   = userId;

                    // check if there's difference in total payment and detail
                    decimal totalPayment       = 0;
                    decimal totalDetailPayment = 0;
                    if (dbItem.Amount.HasValue)
                    {
                        totalPayment = dbItem.Amount.Value;
                    }
                    totalDetailPayment = dbItem.ClientPaymentDetail.Where(o => o.Amount.HasValue).Sum(o => o.Amount.Value);
                    if (totalPayment != totalDetailPayment)
                    {
                        ClientPaymentBallance dbBallance = dbItem.ClientPaymentBallance.FirstOrDefault();
                        if (dbBallance == null)
                        {
                            dbBallance = new ClientPaymentBallance();
                            dbBallance.ClientPayment = dbItem;
                            context.ClientPaymentBallance.Add(dbBallance);
                        }
                        dbBallance.Amount       = totalPayment - totalDetailPayment;
                        dbBallance.Currency     = dbItem.Currency;
                        dbBallance.BallanceDate = DateTime.Now;
                        dbBallance.UpdatedBy    = userId;
                        dbBallance.UpdatedDate  = DateTime.Now;
                        context.SaveChanges();

                        dbBallance.ClientPaymentBallanceUD = Library.Common.Helper.formatIndex(dbBallance.ClientPaymentBallanceID.ToString(), 8, "0");
                        context.SaveChanges();
                    }

                    context.SaveChanges();
                    dtoItem = GetData(string.Empty, 0, dbItem.ClientID.Value, dbItem.ClientPaymentID, out notification).Data;
                    return(true);
                }
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                return(false);
            }
        }
コード例 #2
0
        public override bool UpdateData(int userId, int id, ref object dtoItem, out Library.DTO.Notification notification)
        {
            DTO.ClientPayment dtoClientPayment = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.ClientPayment>();
            notification = new Library.DTO.Notification()
            {
                Type = Library.DTO.NotificationType.Success
            };
            try
            {
                using (ClientPaymentMngEntities context = CreateContext())
                {
                    ClientPayment dbItem = null;
                    if (id == 0)
                    {
                        dbItem = new ClientPayment();
                        context.ClientPayment.Add(dbItem);
                    }
                    else
                    {
                        dbItem = context.ClientPayment.FirstOrDefault(o => o.ClientPaymentID == id);
                    }

                    if (dbItem == null)
                    {
                        throw new Exception("Payment not found!");
                    }
                    if (dbItem.IsConfirmed.HasValue && dbItem.IsConfirmed.Value)
                    {
                        throw new Exception("Can not update the confirmed payment!");
                    }

                    using (DbContextTransaction scope = context.Database.BeginTransaction())
                    {
                        context.Database.ExecuteSqlCommand("SELECT * FROM ClientPayment WITH (TABLOCKX, HOLDLOCK)");

                        try
                        {
                            converter.DTO2DB(dtoClientPayment, ref dbItem);
                            // remove orphan
                            context.ClientPaymentDetail.Local.Where(o => o.ClientPayment == null).ToList().ForEach(o => context.ClientPaymentDetail.Remove(o));
                            context.ClientPaymentDeduction.Local.Where(o => o.ClientPaymentDetail == null).ToList().ForEach(o => context.ClientPaymentDeduction.Remove(o));

                            dbItem.UpdatedDate = DateTime.Now;
                            dbItem.UpdatedBy   = userId;
                            context.SaveChanges();
                            if (id == 0)
                            {
                                dbItem.ClientPaymentUD = Library.Common.Helper.formatIndex(dbItem.ClientPaymentID.ToString(), 8, "0");
                                context.SaveChanges();
                            }
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                        finally
                        {
                            scope.Commit();
                        }
                    }

                    // check if there's difference in total payment and detail
                    decimal totalPayment       = 0;
                    decimal totalDetailPayment = 0;
                    if (dbItem.Amount.HasValue)
                    {
                        totalPayment = dbItem.Amount.Value;
                    }
                    totalDetailPayment = dbItem.ClientPaymentDetail.Where(o => o.Amount.HasValue).Sum(o => o.Amount.Value);
                    if (totalPayment != totalDetailPayment)
                    {
                        ClientPaymentBallance dbBallance = dbItem.ClientPaymentBallance.FirstOrDefault();
                        if (dbBallance == null)
                        {
                            dbBallance = new ClientPaymentBallance();
                            dbBallance.ClientPayment = dbItem;
                            context.ClientPaymentBallance.Add(dbBallance);
                        }
                        dbBallance.Amount       = totalPayment - totalDetailPayment;
                        dbBallance.Currency     = dbItem.Currency;
                        dbBallance.BallanceDate = DateTime.Now;
                        dbBallance.UpdatedBy    = userId;
                        dbBallance.UpdatedDate  = DateTime.Now;
                        context.SaveChanges();

                        dbBallance.ClientPaymentBallanceUD = Library.Common.Helper.formatIndex(dbBallance.ClientPaymentBallanceID.ToString(), 8, "0");
                        context.SaveChanges();
                    }
                    else
                    {
                        ClientPaymentBallance dbBallance = dbItem.ClientPaymentBallance.FirstOrDefault();
                        context.ClientPaymentBallance.Remove(dbBallance);
                        context.SaveChanges();
                    }

                    dtoItem = GetData(string.Empty, 0, dbItem.ClientID.Value, dbItem.ClientPaymentID, out notification).Data;
                    return(true);
                }
            }
            catch (Exception ex)
            {
                notification.Type    = Library.DTO.NotificationType.Error;
                notification.Message = ex.Message;
                return(false);
            }
        }