/// <summary>
 /// Name: Create
 /// Description: Method to create and event
 /// </summary>
 /// <param name="userId">UserId</param>
 /// <param name="eventCreatePrm">EventCreatePrm</param>
 public void Create(Guid userId, EventCreatePrm eventCreatePrm)
 {
     // Open transaction
     using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
     {
         // Create the event
         this.IEventMgr.Save(eventCreatePrm.Event);
         // Create the assistant
         this.IAssistantMgr.Save(new Ent.Assistant()
         {
             EventId = eventCreatePrm.Event.EventId,
             UserId  = userId,
             IsOwner = true
         });
         // Create the address
         eventCreatePrm.Address.EventId = eventCreatePrm.Event.EventId;
         this.IAddressMgr.Save(eventCreatePrm.Address);
         // Create the department
         foreach (Ent.Department department in eventCreatePrm.CollectionDepartment)
         {
             department.EventId = eventCreatePrm.Event.EventId;
         }
         this.IDepartmentMgr.Save(eventCreatePrm.CollectionDepartment);
         // Create dictionary of deparment
         Dictionary <string, Guid> dicDepartment = new Dictionary <string, Guid>();
         foreach (Ent.Department department in eventCreatePrm.CollectionDepartment)
         {
             dicDepartment.Add(department.Name.ToUpper(), department.DepartmentId);
         }
         // Create event group
         foreach (EventGroupCreatePrm eventGroupCreatePrm in eventCreatePrm.CollectionEventGroupCreatePrm)
         {
             eventGroupCreatePrm.EventGroup.EventId = eventCreatePrm.Event.EventId;
         }
         this.IEventGroupMgr.Save(eventCreatePrm.CollectionEventGroupCreatePrm.Select(x => x.EventGroup));
         // Create event group department relation
         ICollection <Ent.EventGroupDepartment> collectionEventGroupDepartment = new List <Ent.EventGroupDepartment>();
         foreach (EventGroupCreatePrm eventGroupCreatePrm in eventCreatePrm.CollectionEventGroupCreatePrm)
         {
             foreach (Ent.Department department in eventGroupCreatePrm.CollectionDepartment)
             {
                 collectionEventGroupDepartment.Add(new Ent.EventGroupDepartment()
                 {
                     EventGroupId = eventGroupCreatePrm.EventGroup.EventGroupId,
                     DepartmentId = dicDepartment[department.Name.ToUpper()]
                 });
             }
         }
         this.IEventGroupDepartmentMgr.Save(collectionEventGroupDepartment);
         // Complete the scope
         scope.Complete();
     }
 }
 public IHttpActionResult Create(EventCreatePrm eventCreatePrm)
 {
     try
     {
         this.EventWrapper.Create(this.GetUserDataId(), eventCreatePrm);
         // return the response
         return(Ok(new GeneralResponse()
         {
             Error = false, Message = ""
         }));
     }
     catch (ManagerException mex)
     {
         // Save entry in log
         this.SystemLogWrapper.Register(SERVER, this.GetUserDataId(), SystemLogWrapper.TYPE_WARNING, mex);
         // Throw the exception
         return(Ok(new GeneralResponse()
         {
             Error = true, Message = mex.Message
         }));
     }
     catch (WrapperException wex)
     {
         // Save entry in log
         this.SystemLogWrapper.Register(SERVER, this.GetUserDataId(), SystemLogWrapper.TYPE_WARNING, wex);
         // Throw the exception
         return(Ok(new GeneralResponse()
         {
             Error = true, Message = wex.Message
         }));
     }
     catch (System.Exception ex)
     {
         // Save entry in log
         this.SystemLogWrapper.Register(SERVER, this.GetUserDataId(), SystemLogWrapper.TYPE_ERROR, ex);
         // Throw the exception
         throw ExceptionResponse.ThrowException("Error creating event", ERROR_CREATING_EVENT);
     }
 }