public long AddMainTask(MainTask iMainTask) { if (iMainTask == null) { throw new Exception("La tâche principale est null"); } if (iMainTask.TaskType == MainTaskTypeEnum.ProjectDeveloppement && iMainTask.ExternalProjectId == null) { throw new Exception("Une tâche de type projet requiert un numéro de projet"); } if (iMainTask.Status != MainTaskStatusEnum.Requested && iMainTask.Status != MainTaskStatusEnum.Waiting) { throw new Exception("Le statut ne permet pas la création de la tâche"); } if (iMainTask.Status == MainTaskStatusEnum.Requested && iMainTask.PackageId != null) { throw new Exception("Le statut requested ne permet l'attachement à un package"); } long newMainTaskId = 0; using (var ts = new TransactionScope()) { if (iMainTask.PackageId != null) { var affectedPackage = GetPackageById((long)iMainTask.PackageId, GranularityEnum.Nude); if (affectedPackage.Status == PackageStatusEnum.Developpement) { iMainTask.Status = MainTaskStatusEnum.Dev; iMainTask.OpenedDate = DateTime.Now; } else if (affectedPackage.Status == PackageStatusEnum.Canceled || affectedPackage.Status == PackageStatusEnum.Production || affectedPackage.Status == PackageStatusEnum.Staging) { throw new Exception("Il n'est pas possible d'affecter une tâche au package avec ce status"); } else if (affectedPackage.Status == PackageStatusEnum.Waiting) { //ne rien faire } else { throw new Exception(affectedPackage.Status.ToStringWithEnumName()); } } var entity = new T_E_MainTask(); entity.Merge(iMainTask); newMainTaskId = DBReleaseDataService.AddMainTask(entity); //SubTask foreach (var subTaskItem in iMainTask.SubTasks.Enum()) { subTaskItem.MainTaskId = newMainTaskId; AddSubTask(subTaskItem); } //ProductLine foreach (var productLineItem in iMainTask.ProductLines.Enum()) { var productLineTaskEntity = new T_E_ProductLineTask(); productLineTaskEntity.ProductLineTaskId = -1; productLineTaskEntity.MainTaskId = newMainTaskId; productLineTaskEntity.ProductLineId = productLineItem.ProductLineId; DBProductDataService.Add <T_E_ProductLineTask>(productLineTaskEntity); } ts.Complete(); } return(newMainTaskId); }