public async Task <SiteTransplantTotal> SaveSiteTransplantTotalAsync(SiteTransplantTotalItem item, string savedBy)
        {
            var transplantCellTypeManager     = this.container.GetInstance <TransplantCellTypeManager>();
            var clinicalPopulationTypeManager = this.container.GetInstance <ClinicalPopulationTypeManager>();
            var transplantTypeManager         = this.container.GetInstance <TransplantTypeManager>();
            var siteTransplantTotalManager    = this.container.GetInstance <SiteTransplantTotalManager>();

            var cellTypeTask       = transplantCellTypeManager.GetByNameAsync(item.TransplantCellType.Name);
            var popTypeTask        = clinicalPopulationTypeManager.GetByNameAsync(item.ClinicalPopulationType.Name);
            var transplantTypeTask = transplantTypeManager.GetByNameAsync(item.TransplantType.Name);

            await Task.WhenAll(cellTypeTask, popTypeTask, transplantTypeTask);

            if (cellTypeTask.Result == null || popTypeTask.Result == null || transplantTypeTask.Result == null)
            {
                throw new Exception("Cannot find data");
            }

            var result = await siteTransplantTotalManager.SaveSiteTransplantTotalAsync(cellTypeTask.Result, popTypeTask.Result, transplantTypeTask.Result, item.Id,
                                                                                       item.SiteId, item.IsHaploid, item.NumberOfUnits, Convert.ToDateTime(item.StartDate), Convert.ToDateTime(item.EndDate), savedBy);

            await this.InvalidateCacheAsync(savedBy);

            return(result);
        }
        public SiteTransplantTotal SaveSiteTransplantTotal(SiteTransplantTotalItem item, string savedBy)
        {
            var transplantCellTypeManager     = this.container.GetInstance <TransplantCellTypeManager>();
            var clinicalPopulationTypeManager = this.container.GetInstance <ClinicalPopulationTypeManager>();
            var transplantTypeManager         = this.container.GetInstance <TransplantTypeManager>();
            var siteTransplantTotalManager    = this.container.GetInstance <SiteTransplantTotalManager>();

            var cellType       = transplantCellTypeManager.GetByName(item.TransplantCellType.Name);
            var popType        = clinicalPopulationTypeManager.GetByName(item.ClinicalPopulationType.Name);
            var transplantType = transplantTypeManager.GetByName(item.TransplantType.Name);

            if (cellType == null || popType == null || transplantType == null)
            {
                throw new Exception("Cannot find data");
            }

            var result = siteTransplantTotalManager.SaveSiteTransplantTotal(cellType, popType, transplantType, item.Id,
                                                                            item.SiteId, item.IsHaploid, item.NumberOfUnits, Convert.ToDateTime(item.StartDate), Convert.ToDateTime(item.EndDate), savedBy);

            this.InvalidateCache(savedBy);

            return(result);
        }
        public async Task <ServiceResponse <SiteTransplantTotalItem> > SaveSiteTransplantTotal(SiteTransplantTotalItem model)
        {
            DateTime startTime = DateTime.Now;

            var siteFacade = this.Container.GetInstance <SiteFacade>();

            try
            {
                var item = await siteFacade.SaveSiteTransplantTotalAsync(model, base.Email);

                base.LogMessage("SaveSiteTransplantTotal", DateTime.Now - startTime);

                if (!model.Id.HasValue)
                {
                    item.TransplantCellType = new TransplantCellType
                    {
                        Name = model.TransplantCellType.Name
                    };
                    item.ClinicalPopulationType = new ClinicalPopulationType
                    {
                        Id   = 0,
                        Name = model.ClinicalPopulationType.Name
                    };
                    item.TransplantType = new TransplantType
                    {
                        Id   = 0,
                        Name = model.TransplantType.Name
                    };
                }

                this.SendInvalidation();

                return(new ServiceResponse <SiteTransplantTotalItem>
                {
                    Item = ModelConversions.Convert(item)
                });
            }
            catch (Exception ex)
            {
                return(base.HandleException <SiteTransplantTotalItem>(ex));
            }
        }