public static ClientAndClientBuildingsPackage GetPackageCopy(this ClientAndClientBuildingsPackage source)
 {
     ClientAndClientBuildingsPackage result = new ClientAndClientBuildingsPackage();
       if (source != null)
       {
     if (source.Client != null)
     {
       result.Client = source.Client.GetPrimitiveCopy();
       foreach (ClientBuildingAndBuildingPackage clientBuildingAndBuildingPackage in source.ClientBuildings)
       {
     result.ClientBuildings.Add(clientBuildingAndBuildingPackage.GetPackageCopy());
       }
     }
       }
       return result;
 }
 public static ClientAndClientBuildingsPackage GetClientAndBuildingsPackage(this Client client)
 {
     ClientAndClientBuildingsPackage result = new ClientAndClientBuildingsPackage();
       if (client != null)
       {
     result.Client = client.GetPrimitive();
     if (client.ClientBuildings != null)
     {
       foreach (ClientBuilding clientBuilding in client.ClientBuildings)
       {
     if (clientBuilding != null && clientBuilding.Building != null)
       result.ClientBuildings.Add(clientBuilding.GetClientBuildingAndBuildingPackage());
       }
     }
       }
       return result;
 }
Example #3
0
        /// <summary>
        /// Updates the client.
        /// </summary>
        /// <param name="clientPrimitive">The client primitive.</param>
        public void CreateOrUpdateClient(ClientAndClientBuildingsPackage clientAndBuildingsPackage)
        {
            try
              {
            using (SmartWorkingEntities context = new SmartWorkingEntities())
            {
              Client client = clientAndBuildingsPackage.Client.GetEntity();

              Client existingObject = context.Clients.Include("ClientBuildings").Where(x => x.Id == client.Id).FirstOrDefault();

              //no record of this item in the DB, item being passed in has a PK
              if (existingObject == null && client.Id > 0)
              {
            throw new FaultException<ExceptionDetail>(new ExceptionDetail(new Exception("Błąd zapisu do bazy")),
                                                        "Obiekt nie istniał w bazie, a jego Id jest większe od 0.");
              }

              //Item has no PK value, must be new
              if (client.Id <= 0)
              {
            context.Clients.AddObject(client);
            foreach (ClientBuildingAndBuildingPackage clientBuildingPackage in clientAndBuildingsPackage.ClientBuildings)
            {
              ClientBuildingPrimitive clientBuildingPrimitive =
                clientBuildingPackage.GetClientBuildingPrimitiveWithReference();

              if (clientBuildingPrimitive != null)
              {
                clientBuildingPrimitive.Id = 0;
                ClientBuilding clientBuilding = clientBuildingPrimitive.GetEntity();
                clientBuilding.Client = client;
                context.ClientBuildings.AddObject(clientBuilding);
              }
            }
              }
              //Item was retrieved, and the item passed has a valid ID, do an update
              else
              {
            List<ClientBuildingPrimitive> existingClientBuildings = existingObject.ClientBuildings.Where(x => !x.IsDeleted).Select(x => x.GetPrimitive()).ToList();
            List<ClientBuildingPrimitive> newClientBuildings = clientAndBuildingsPackage.GetClientBuildingListWithReference().ToList();
            List<ClientBuildingPrimitive> theSameElements = newClientBuildings.Where(x => existingClientBuildings.Select(y => y.Building_Id).Contains(x.Building_Id)).ToList();

            existingClientBuildings.RemoveAll(x => theSameElements.Select(y => y.Building_Id).Contains(x.Building_Id));
            newClientBuildings.RemoveAll(x => theSameElements.Select(y => y.Building_Id).Contains(x.Building_Id));

            //remove
            if (existingClientBuildings.Count() > 0)
            {
              List<int> existingClientBuildingIds = existingClientBuildings.Select(x => x.Id).ToList();
              List<ClientBuilding> clientBuildingListToDelete =
                context.ClientBuildings.Where(x => existingClientBuildingIds.Contains(x.Id)).ToList();

              foreach (ClientBuilding clientBuldingToDelete in clientBuildingListToDelete)
              {

                clientBuldingToDelete.Deleted = DateTime.Now;
                //context.ClientBuildings.DeleteObject(clientBuldingToDelete);
              }
            }

            //add
            foreach (ClientBuildingPrimitive clientBuildingPrimitive in newClientBuildings)
            {
              context.ClientBuildings.AddObject(clientBuildingPrimitive.GetEntity());
            }

            context.Clients.ApplyCurrentValues(client);
              }

              context.SaveChanges();
            }
              }
              catch (Exception e)
              {
            throw new FaultException<ExceptionDetail>(new ExceptionDetail(e), e.Message);
              }
        }