public ColdWeightEntryModel GetColdWeightEntryPreferences(int?orderId)
        {
            if (!orderId.HasValue)
            {
                return(new ColdWeightEntryModel());
            }

            var order = _orderRepository
                        .Query()
                        .Where(x => x.Id == orderId.Value)
                        .Include(x => x.Customer)
                        .Select(x => new
            {
                x.Id,
                x.Customer.Name,
                x.ExpectedHeadNumber,
                x.ReceivedHeadNumber,
                x.SlaughteredHeadNumber
            })
                        .FirstOrDefault();

            if (order == null)
            {
                return(new ColdWeightEntryModel());
            }

            var coldWeightEntry = _coldWeightEntryRepository.GetByOrderId(orderId.Value);

            if (coldWeightEntry == null)
            {
                coldWeightEntry = new ColdWeightEntry
                {
                    OrderId = orderId.Value
                };

                _coldWeightEntryRepository.Add(coldWeightEntry);
                _coldWeightEntryRepository.Save();
            }

            return(new ColdWeightEntryModel
            {
                OrderId = order.Id,
                Customer = order.Name,
                HeadExpected = order.ExpectedHeadNumber,
                HeadReceived = order.ReceivedHeadNumber,
                HeadProcessed = order.SlaughteredHeadNumber,
                QualityGradeId = coldWeightEntry.QualityGradeId,
                TotalCount = coldWeightEntry.TotalCount,
                TotalWeight = coldWeightEntry.TotalWeight,
            });
        }
        public void Save(IEnumerable <ColdWeightEntryDetailItem> newarray, int orderId, TrackAnimal trackAnimal)
        {
            var coldWeightEntry = _coldWeightEntryRepository.GetByOrderId(orderId);

            if (coldWeightEntry == null)
            {
                coldWeightEntry = new ColdWeightEntry
                {
                    OrderId       = orderId,
                    TrackAnimalId = trackAnimal
                };
                _coldWeightEntryRepository.Add(coldWeightEntry);
            }
            coldWeightEntry.TrackAnimalId = trackAnimal;
            _coldWeightEntryRepository.Save();

            List <ColdWeightEntryDetail> newColdWeightDetails = new List <ColdWeightEntryDetail>();

            foreach (var newItem in newarray)
            {
                newColdWeightDetails.Add(new ColdWeightEntryDetail
                {
                    Id               = newItem.Id,
                    ColdWeightId     = coldWeightEntry.Id,
                    AnimalNumber     = newItem.AnimalNumber,
                    EarTag           = newItem.EarTag,
                    FirstSideWeight  = newItem.FirstCustomer.CustomerLocationId,
                    SecondSideWeight = (trackAnimal == TrackAnimal.Half || trackAnimal == TrackAnimal.Quarter ||
                                        coldWeightEntry.TrackAnimalId == TrackAnimal.HalfAndTwoQuaters || coldWeightEntry.TrackAnimalId == TrackAnimal.ThreeQuatersAndQuater) ? newItem.SecondCustomer.CustomerLocationId : null,
                    ThirdSideWeight  = (trackAnimal == TrackAnimal.Quarter || trackAnimal == TrackAnimal.HalfAndTwoQuaters) ? newItem.ThirdCustomer.CustomerLocationId : null,
                    FourthSideWeight = trackAnimal == TrackAnimal.Quarter ? newItem.FourthCustomer.CustomerLocationId : null,
                    IsOrganic        = newItem.IsOrganic,
                    TrackAnimalId    = newItem.TrackAnimalBySelectColumn,
                    HotWeight        = newItem.HotWeight,
                    ColdWeight       = newItem.ColdWeight,
                    QualityGradeId   = newItem.QualityGrade.Id,
                    AnimalLabelId    = newItem.AnimalLabel.Id,
                });
            }

            if (coldWeightEntry.ColdWeightEntryDetails.Any())
            {
                var existingIds = coldWeightEntry.ColdWeightEntryDetails.Select(ord => ord.Id).ToList();
                foreach (var item in newColdWeightDetails)
                {
                    if (existingIds.Contains(item.Id))
                    {
                        _coldWeightEntryDetailRepository.Update(newColdWeightDetails.First(x => x.Id == item.Id));
                    }
                    else
                    {
                        _coldWeightEntryDetailRepository.Add(item);
                    }
                }
            }
            else
            {
                _coldWeightEntryDetailRepository.AddRange(newColdWeightDetails);
            }

            _coldWeightEntryDetailRepository.Save();
        }