public static void EnsureSeedData(this A1ServicesAppDbContext ctx)
        {
            var jobMaterialLinks = ProcessServiceMaterialsLinkFile("D:\\Projects\\A1ServicesApp\\A1ServicesApp\\Features\\JobServiceMaterialLinks\\ServiceMaterialsLinks.csv");
            var servicesList     = ProcessServicesFile("D:\\Projects\\A1ServicesApp\\A1ServicesApp\\Features\\JobServiceMaterialLinks\\ServicesBook.csv");
            var materialsList    = ProcessMaterialsFile("D:\\Projects\\A1ServicesApp\\A1ServicesApp\\Features\\JobServiceMaterialLinks\\MaterialsBook.csv");

            var jobServiceMaterialLinks = new List <JobServiceMaterialLink>();

            if (ctx.JobServiceMaterialLinks.Any())
            {
                return;
            }

            ctx.JobMaterials.AddRange(materialsList);
            ctx.JobServices.AddRange(servicesList);
            ctx.SaveChanges();

            var jobMaterialLinksGroups = jobMaterialLinks.GroupBy(j => j.ServiceId).ToList();



            foreach (var link in jobMaterialLinksGroups)
            {
                var service = ctx.JobServices.Where(s => s.ServiceId == link.Key).FirstOrDefault();

                var newJobServiceMaterialLink = new JobServiceMaterialLink()
                {
                    ServiceId     = service.ServiceId,
                    ServiceCode   = service.Code,
                    Active        = 1,
                    MaterialLists = new List <MaterialList>()
                };

                foreach (var matList in link)
                {
                    var newMaterialList = new MaterialList()
                    {
                        Type = "All",
                        Name = matList.MaterialCode + " - " + link.Key + " - " + "Links"
                    };

                    var material         = ctx.JobMaterials.Where(j => j.MaterialId == matList.MaterialId).FirstOrDefault();
                    var materialListItem = new MaterialListItem()
                    {
                        JobMaterialId = material.Id,
                        JobMaterial   = material,
                        MaterialId    = material.MaterialId
                    };
                    newMaterialList.MaterialListItems.Add(materialListItem);

                    newJobServiceMaterialLink.MaterialLists.Add(newMaterialList);
                }

                jobServiceMaterialLinks.Add(newJobServiceMaterialLink);
            }

            ctx.JobServiceMaterialLinks.AddRange(jobServiceMaterialLinks);
            ctx.SaveChanges();
        }
        private IMaterialValidator ConvertToAllMaterialValidators(MaterialList list, JobServiceMaterialLink link)
        {
            var validator = (IMaterialValidator) new AllMaterialValidator()
            {
                ServiceCode   = link.ServiceCode,
                ServiceId     = link.ServiceId,
                State         = new Valid(),
                MaterialLists = new List <MaterialList>()
                {
                    new MaterialList(list)
                }
            };

            return(validator);
        }
        public Task <JobServiceMaterialLinkDto> Handle(CreateNewJobServiceMaterialLinkCommand request, CancellationToken cancellationToken)
        {
            var jobService    = _ctx.JobServices.Where(s => s.ServiceId == request.ServiceId).FirstOrDefault();
            var materialLists = request.MaterialLists.ToList();

            var jobMaterials     = new List <JobMaterial>();
            var newMaterialLists = new List <MaterialList>();

            foreach (var list in request.MaterialLists)
            {
                var allMaterialListItems = new List <MaterialListItem>();
                foreach (var m in list.MaterialListItems)
                {
                    var material            = _ctx.JobMaterials.Where(jm => jm.MaterialId == m.MaterialId).FirstOrDefault();
                    var newMaterialListItem = new MaterialListItem()
                    {
                        MaterialId    = material.MaterialId,
                        JobMaterialId = material.Id
                    };
                    allMaterialListItems.Add(newMaterialListItem);
                }
                list.MaterialListItems = allMaterialListItems;
                newMaterialLists.Add(list);
            }



            var newJobServiceMaterialLink = new JobServiceMaterialLink()
            {
                Active        = request.Active,
                Name          = request.Name,
                ServiceId     = request.ServiceId,
                ServiceCode   = jobService.Code,
                MaterialLists = newMaterialLists
            };

            _ctx.JobServiceMaterialLinks.Add(newJobServiceMaterialLink);
            _ctx.SaveChanges();



            return(Task.FromResult <JobServiceMaterialLinkDto>(_mapper.Map <JobServiceMaterialLinkDto>(newJobServiceMaterialLink)));
        }