Ejemplo n.º 1
0
 //public PartnershipAcceptedState(OrganizationAccount sender, IPartnershipRepository repository)
 //{
 //    _sender = sender;
 //    _submitDateTime = DateTime.Now;
 //    _repository = repository;
 //}
 public PartnershipAcceptedState(PartnershipStateInfo info)
 {
     _lastReceiverKey = info.Sender.Key;
     _lastSenderKey = info.Receiver.Key;
     _lastAction = info.Action;
 }
        public static bool UpdatePartnershipStatus(Guid senderOrganizationAccountKey, Guid receiverOrganizationAccountKey, DateTime actionDateTime, PartnershipAction action)
        {
            //OrganizationAccount sender = null;
            //OrganizationAccount receiver = null;
            //PartnershipStateInfo newPartnershipState = null;

            //using (var db = new FHNWPrototypeDB())
            //{
            //     sender = db.OrganizationAccounts.Single(x => x.Key == senderOrganizationAccountKey);
            //    sender.Wall = new ContentStream();
            //    sender.Wall.Posts = new List<Post>();
            //     receiver = db.OrganizationAccounts.Single(x => x.Key == receiverOrganizationAccountKey);
            //    receiver.Wall = new ContentStream();
            //    receiver.Wall.Posts = new List<Post>();

            //     newPartnershipState = new PartnershipStateInfo();
            //    newPartnershipState.Key = Guid.NewGuid();
            //    newPartnershipState.Action = action;
            //    newPartnershipState.ActionDateTime = actionDateTime;
            //    newPartnershipState.Receiver = sender;
            //    newPartnershipState.Sender = receiver;

            //    sender.PartnershipsRequested.Add(newPartnershipState);
            //    receiver.PartnershipsReceived.Add(newPartnershipState);

            //    db.SaveChanges();
            //}

              PartnershipStateInfo lastPartnershipStateInfo = GetPartnershipBetweenOrganizationAccounts(senderOrganizationAccountKey, receiverOrganizationAccountKey);

              if (lastPartnershipStateInfo != null)
              {
                  var partnershipState = PartnershipStateFactory.GetPartnershipStateBasedOnInfo(lastPartnershipStateInfo);
                  switch (action)
                  {

                      case PartnershipAction.Accept:
                          if (partnershipState.CanAcceptPartnershipRequestFrom(senderOrganizationAccountKey, receiverOrganizationAccountKey))
                          {
                              using (var db = new FHNWPrototypeDB())
                              {

                                  var lastState = (from partnerships in db.Partnerships
                                                                   .Include("Sender.Organization")
                                                                   .Include("Receiver.Organization")
                                                   where (((partnerships.Sender.Key == senderOrganizationAccountKey && partnerships.Receiver.Key == receiverOrganizationAccountKey) ||
                                                     (partnerships.Sender.Key == receiverOrganizationAccountKey && partnerships.Receiver.Key == senderOrganizationAccountKey)) &&
                                                     (partnerships.IsActive == true))
                                                   orderby partnerships.ActionDateTime descending
                                                   select partnerships)
                                          .FirstOrDefault();

                                  lastState.IsActive = false;

                                  OrganizationAccount sender = db.OrganizationAccounts
                                          .Include("PartnershipsRequested")
                                          .Include("PartnershipsReceived")
                                          .SingleOrDefault(x => x.Key == senderOrganizationAccountKey);
                                  OrganizationAccount receiver = db.OrganizationAccounts
                                                             .Include("PartnershipsRequested")
                                                             .Include("PartnershipsReceived")
                                         .SingleOrDefault(x => x.Key == receiverOrganizationAccountKey);

                                  PartnershipStateInfo newPartnershipState = new PartnershipStateInfo();
                                  newPartnershipState.Key = Guid.NewGuid();
                                  newPartnershipState.Action = PartnershipAction.Accept;
                                  newPartnershipState.ActionDateTime = actionDateTime;
                                  newPartnershipState.Receiver = receiver;
                                  newPartnershipState.Sender = sender;
                                  newPartnershipState.IsActive = true;
                                  db.Partnerships.Add(newPartnershipState);

                                  // sender.PartnershipsRequested.Add(newPartnershipState);
                                  // receiver.PartnershipsReceived.Add(newPartnershipState);

                                  db.SaveChanges();
                                  return true;
                              }
                              //friendshipState.AcceptPartnershipRequestFrom(senderOrganizationAccountKey, receiverOrganizationAccountKey);
                          }
                          else
                          {
                              return false;
                          }

                      case PartnershipAction.Cancel:
                          if (partnershipState.CanCancelPartnershipWith(senderOrganizationAccountKey, receiverOrganizationAccountKey))
                          {
                              using (var db = new FHNWPrototypeDB())
                              {

                                  var lastState = (from partnerships in db.Partnerships
                        .Include("Sender.Organization")
                         .Include("Receiver.Organization")

                                                   where (((partnerships.Sender.Key == senderOrganizationAccountKey && partnerships.Receiver.Key == receiverOrganizationAccountKey) ||
                                                     (partnerships.Sender.Key == receiverOrganizationAccountKey && partnerships.Receiver.Key == senderOrganizationAccountKey)) &&
                                                     (partnerships.IsActive == true))
                                                   orderby partnerships.ActionDateTime descending
                                                   select partnerships)
                .FirstOrDefault();

                                  lastState.IsActive = false;

                                  OrganizationAccount sender = db.OrganizationAccounts
                                  .Include("PartnershipsRequested")
                                  .Include("PartnershipsReceived")
                                  .SingleOrDefault(x => x.Key == senderOrganizationAccountKey);
                                  OrganizationAccount receiver = db.OrganizationAccounts
                                                             .Include("PartnershipsRequested")
                                                             .Include("PartnershipsReceived")
                                         .SingleOrDefault(x => x.Key == receiverOrganizationAccountKey);

                                  PartnershipStateInfo newPartnershipState = new PartnershipStateInfo();
                                  newPartnershipState.Key = Guid.NewGuid();
                                  newPartnershipState.Action = PartnershipAction.Cancel;
                                  newPartnershipState.ActionDateTime = actionDateTime;
                                  newPartnershipState.Receiver = receiver;
                                  newPartnershipState.Sender = sender;
                                  newPartnershipState.IsActive = true;

                                  db.Partnerships.Add(newPartnershipState);

                                  //  sender.PartnershipsRequested.Add(newPartnershipState);
                                  // receiver.PartnershipsReceived.Add(newPartnershipState);

                                  db.SaveChanges();
                                  return true;
                              }
                              // friendshipState.CancelPartnershipWith(senderOrganizationAccountKey, receiverOrganizationAccountKey);
                          }
                          else
                          {
                              return false;
                          }

                      case PartnershipAction.Reject:
                          if (partnershipState.CanRejectPartnershipRequestFrom(senderOrganizationAccountKey, receiverOrganizationAccountKey))
                          {
                              using (var db = new FHNWPrototypeDB())
                              {

                                  var lastState = (from partnerships in db.Partnerships
                      .Include("Sender.Organization")
                     .Include("Receiver.Organization")
                                                   where (((partnerships.Sender.Key == senderOrganizationAccountKey && partnerships.Receiver.Key == receiverOrganizationAccountKey) ||
                                                                                      (partnerships.Sender.Key == receiverOrganizationAccountKey && partnerships.Receiver.Key == senderOrganizationAccountKey)) &&
                                                                                      (partnerships.IsActive == true))
                                                   orderby partnerships.ActionDateTime descending
                                                   select partnerships)
              .FirstOrDefault();

                                  lastState.IsActive = false;

                                  OrganizationAccount sender = db.OrganizationAccounts
                                  .Include("PartnershipsRequested")
                                  .Include("PartnershipsReceived")
                                  .SingleOrDefault(x => x.Key == senderOrganizationAccountKey);
                                  OrganizationAccount receiver = db.OrganizationAccounts
                                                             .Include("PartnershipsRequested")
                                                             .Include("PartnershipsReceived")
                                         .SingleOrDefault(x => x.Key == receiverOrganizationAccountKey);

                                  PartnershipStateInfo newPartnershipState = new PartnershipStateInfo();
                                  newPartnershipState.Key = Guid.NewGuid();
                                  newPartnershipState.Action = PartnershipAction.Reject;
                                  newPartnershipState.ActionDateTime = actionDateTime;
                                  newPartnershipState.Receiver = receiver;
                                  newPartnershipState.Sender = sender;
                                  newPartnershipState.IsActive = true;

                                  db.Partnerships.Add(newPartnershipState);

                                  //  sender.PartnershipsRequested.Add(newPartnershipState);
                                  //  receiver.PartnershipsReceived.Add(newPartnershipState);

                                  db.SaveChanges();
                                  return true;
                              }
                              //friendshipState.RejectPartnershipRequestFrom(senderOrganizationAccountKey, receiverOrganizationAccountKey);
                          }
                          else
                          {
                              return false;
                          }

                      case PartnershipAction.Request:
                          if (partnershipState.CanRequestPartnershipTo(senderOrganizationAccountKey, receiverOrganizationAccountKey))
                          {
                              using (var db = new FHNWPrototypeDB())
                              {

                                  var lastState = (from partnerships in db.Partnerships
                       .Include("Sender.Organization")
                       .Include("Receiver.Organization")

                                                   where (((partnerships.Sender.Key == senderOrganizationAccountKey && partnerships.Receiver.Key == receiverOrganizationAccountKey) ||
                                                     (partnerships.Sender.Key == receiverOrganizationAccountKey && partnerships.Receiver.Key == senderOrganizationAccountKey)) &&
                                                     (partnerships.IsActive == true))
                                                   orderby partnerships.ActionDateTime descending
                                                   select partnerships)
                                                  .FirstOrDefault();

                                  lastState.IsActive = false;

                                  OrganizationAccount sender = db.OrganizationAccounts
                                  .Include("PartnershipsRequested")
                                  .Include("PartnershipsReceived")
                                  .SingleOrDefault(x => x.Key == senderOrganizationAccountKey);
                                  OrganizationAccount receiver = db.OrganizationAccounts
                                                             .Include("PartnershipsRequested")
                                                             .Include("PartnershipsReceived")
                                         .SingleOrDefault(x => x.Key == receiverOrganizationAccountKey);

                                  PartnershipStateInfo newPartnershipState = new PartnershipStateInfo();
                                  newPartnershipState.Key = Guid.NewGuid();
                                  newPartnershipState.Action = PartnershipAction.Request;
                                  newPartnershipState.ActionDateTime = actionDateTime;
                                  newPartnershipState.Receiver = receiver;
                                  newPartnershipState.Sender = sender;
                                  newPartnershipState.IsActive = true;

                                  db.Partnerships.Add(newPartnershipState);

                                  //  sender.PartnershipsRequested.Add(newPartnershipState);
                                  //  receiver.PartnershipsReceived.Add(newPartnershipState);

                                  db.SaveChanges();
                                  return true;
                              }
                              // friendshipState.RequestPartnershipTo(senderOrganizationAccountKey, receiverOrganizationAccountKey);
                          }
                          else
                          {
                              return false;
                          }
                      //break;
                  }

                  return false;
              }
              else
              {
                  if (action == PartnershipAction.Request)
                  {
                      using (var db = new FHNWPrototypeDB())
                      {

                          var lastState = (from partnerships in db.Partnerships
                                                                      .Include("Sender.Organization")
                                                                      .Include("Receiver.Organization")

                                           where (((partnerships.Sender.Key == senderOrganizationAccountKey && partnerships.Receiver.Key == receiverOrganizationAccountKey) ||
                                             (partnerships.Sender.Key == receiverOrganizationAccountKey && partnerships.Receiver.Key == senderOrganizationAccountKey)) &&
                                             (partnerships.IsActive == true))
                                           orderby partnerships.ActionDateTime descending
                                           select partnerships)
                                          .FirstOrDefault();

                          lastState.IsActive = false;

                          OrganizationAccount sender = db.OrganizationAccounts
                                  .Include("PartnershipsRequested")
                                  .Include("PartnershipsReceived")
                                  .SingleOrDefault(x => x.Key == senderOrganizationAccountKey);
                          OrganizationAccount receiver = db.OrganizationAccounts
                                                     .Include("PartnershipsRequested")
                                                     .Include("PartnershipsReceived")
                                 .SingleOrDefault(x => x.Key == receiverOrganizationAccountKey);

                          PartnershipStateInfo newPartnershipState = new PartnershipStateInfo();
                          newPartnershipState.Key = Guid.NewGuid();
                          newPartnershipState.Action = PartnershipAction.Request;
                          newPartnershipState.ActionDateTime = actionDateTime;
                          newPartnershipState.Receiver = receiver;
                          newPartnershipState.Sender = sender;
                          newPartnershipState.IsActive = true;

                          db.Partnerships.Add(newPartnershipState);

                          //  sender.PartnershipsRequested.Add(newPartnershipState);
                          //  receiver.PartnershipsReceived.Add(newPartnershipState);

                          db.SaveChanges();
                          return true;
                      }
                  }
                  else
                  {
                      return false;
                  }

              }
        }
 public static bool UpdatePartnershipStatus(string senderOrganizationAccountKey, string receiverOrganizationAccountKey, DateTime actionDateTime, PartnershipAction action)
 {
     bool success = OrganizationAccountRepository.UpdatePartnershipStatus(new Guid(senderOrganizationAccountKey), new Guid(receiverOrganizationAccountKey), actionDateTime, action);
     return success;
 }