예제 #1
0
        public System.Data.SqlClient.SqlTransaction SaveTruckRegistration()
        {
            IGINProcess    originalGIN = new GINProcessBLL(currentGINProcess.GINProcessInformation.TransactionId);
            SqlTransaction transaction = currentGINProcess.SaveTruckRegistration();
            //ConfirmNoConcurrency(Trucks, Loads, Weight)
            //newly added trucks
            var newTrucks = (from cTruck in currentGINProcess.GINProcessInformation.Trucks
                             where !(from oTruck in originalGIN.GINProcessInformation.Trucks select oTruck.TruckId).Contains(cTruck.TruckId)
                             select new object[] { null, cTruck, AuditTrailWrapper.NewRecord });
            //existing trucks
            var existingTrucks = (from cTruck in currentGINProcess.GINProcessInformation.Trucks
                                  join oTruck in originalGIN.GINProcessInformation.Trucks on cTruck.TruckId equals oTruck.TruckId
                                  select new object[] { oTruck, cTruck, AuditTrailWrapper.ExistingRecord });
            //deleted trucks
            var deletedTrucks = (from oTruck in originalGIN.GINProcessInformation.Trucks
                                 where !(from cTruck in currentGINProcess.GINProcessInformation.Trucks select cTruck.TruckId).Contains(oTruck.TruckId)
                                 select oTruck);

            try
            {
                AuditTrailWrapper atw = new AuditTrailWrapper(AuditTrailWrapper.TruckRegistration, newTrucks.ToArray(), "PUN Process");
                atw.AddChange(existingTrucks.ToArray());
                if (!atw.Save())
                {
                    transaction.Rollback();
                    throw new Exception("Failed to save audit trail!");
                }
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
            return(transaction);
        }