private CustomerContactPersonEntity InnerInsert(CustomerContactPersonEntity customerContactPerson, string userName, int categoryID)
        {
            #region Person
            switch (customerContactPerson.Person.EditStatus.Value)
            {
            case StatusEntityValue.New:
            {
                customerContactPerson.Person = base.InnerInsert(customerContactPerson.Person, userName);
                break;
            }

            case StatusEntityValue.Updated:
            {
                customerContactPerson.Person = base.InnerUpdate(customerContactPerson.Person, userName, true);
                break;
            }

            default: break;
            }
            #endregion

            customerContactPerson.ID = _customerContactPersonDA.Insert(customerContactPerson.Person.ID, customerContactPerson.CustomerID,
                                                                       (customerContactPerson.ContactType == null) ? 0 : customerContactPerson.ContactType.ID, customerContactPerson.UrgentContact,
                                                                       customerContactPerson.AlternativeContact, userName);
            customerContactPerson.DBTimeStamp = _customerContactPersonDA.GetDBTimeStamp(customerContactPerson.ID);

            if (_customerContactPersonDA.GetCustomerContactPersonsFromPerson(customerContactPerson.Person.ID) == 1)
            {
                _personCatRelDA.Insert(customerContactPerson.Person.ID, categoryID, userName);
            }

            return(customerContactPerson);
        }
        private void ValidateCustomerContactPerson(CustomerContactPersonEntity customerContactPerson, ElementBL elementBL)
        {
            if (customerContactPerson == null)
            {
                throw new ArgumentNullException("customerContactPerson");
            }

            CommonEntities.ElementEntity _customerContactPersonMetadata = base.GetElementByName(EntityNames.CustomerContactPersonEntityName, elementBL);
            CustomerContactPersonHelper  customerContactPersonHelper    = new CustomerContactPersonHelper(_customerContactPersonMetadata);

            ValidationResults result = customerContactPersonHelper.Validate(customerContactPerson);

            if (!result.IsValid)
            {
                StringBuilder sb = new StringBuilder();
                foreach (ValidationResult vr in result)
                {
                    sb.AppendLine();
                    sb.AppendFormat("■ {0}", vr.Message);
                }

                throw new Exception(
                          string.Format(Properties.Resources.ERROR_CustomerContactPersonValidationError, sb));
            }

            //base.ValidatePerson(customerContactPerson.Person, elementBL);
        }
        private CustomerContactPersonEntity Update(CustomerContactPersonEntity customerContactPerson)
        {
            if (customerContactPerson == null)
            {
                throw new ArgumentNullException("customerContactPerson");
            }

            string userName = IdentityUser.GetIdentityUserName();

            using (TransactionScope scope = new TransactionScope())
            {
                if (customerContactPerson.Person.EditStatus.Value == StatusEntityValue.Updated)
                {
                    customerContactPerson.Person = base.InnerUpdate(customerContactPerson.Person, userName, true);
                }
                //else
                //{
                //    customerContactPerson.Person = base.InnerUpdate(customerContactPerson.Person, userName, false);
                //}

                this.InnerUpdate(customerContactPerson, userName);

                scope.Complete();
            }

            this.ResetCustomerContactPerson(customerContactPerson);
            LOPDLogger.Write(EntityNames.CustomerContactPersonEntityName, customerContactPerson.ID, ActionType.Modify);
            return(customerContactPerson);
        }
        private CustomerContactPersonEntity Insert(CustomerContactPersonEntity customerContactPerson)
        {
            if (customerContactPerson == null)
            {
                throw new ArgumentNullException("customerContactPerson");
            }

            string userName   = IdentityUser.GetIdentityUserName();
            int    categoryID = _categoryDA.GetCategoryIDByCategoryKey((int)CategoryPersonKeyEnum.CustContactPerson);

            if (categoryID <= 0)
            {
                throw new Exception(Properties.Resources.ERROR_NoCategoryDefinedForCustomerContactPersons);
            }

            using (TransactionScope scope = new TransactionScope())
            {
                this.InnerInsert(customerContactPerson, userName, categoryID);

                scope.Complete();
            }

            this.ResetCustomerContactPerson(customerContactPerson);
            LOPDLogger.Write(EntityNames.CustomerContactPersonEntityName, customerContactPerson.ID, ActionType.Create);
            return(customerContactPerson);
        }
        private void CheckInsertPreconditions(CustomerContactPersonEntity customerContactPerson, bool forceSave, out PersonAddressListDTO[] homonymPersons, ElementBL elementBL)
        {
            if (customerContactPerson == null)
            {
                throw new ArgumentNullException("customerContactPerson");
            }

            ValidateCustomerContactPerson(customerContactPerson, elementBL);

            #region Comentado por SALVA
            //PersonFindRequest personFind = new PersonFindRequest();
            //BackofficeConfigurationSection backOfficeConfig = FrameworkConfigurationService<BackofficeConfigurationSection>.GetSection("backoffice") as BackofficeConfigurationSection;

            //if (backOfficeConfig.EntitySettings.PersonEntity.Attributes != null)
            //{
            //    foreach (EntityAttributeElement attrib in backOfficeConfig.EntitySettings.PersonEntity.Attributes)
            //    {
            //        if ((attrib.Name == "FirstName") && (attrib.Mandatory))
            //        {
            //            personFind.FirstName = customerContactPerson.Person.FirstName;
            //            personFind.MandatoryFirstName = true;
            //        }

            //        if ((attrib.Name == "LastName") && (attrib.Mandatory))
            //        {
            //            personFind.LastName = customerContactPerson.Person.LastName;
            //            personFind.MandatoryLastName = true;
            //        }
            //    }
            //}
            #endregion

            homonymPersons = null;

            switch (customerContactPerson.Person.EditStatus.Value)
            {
            case StatusEntityValue.New:
                //int id = _personDA.GetPerson(personFind);
                //if (id > 0)
                //{
                //    throw new Exception(string.Format(Properties.Resources.MSG_PersonAlreadyExists, string.Concat(customerContactPerson.Person.FirstName, " ", customerContactPerson.Person.LastName)));
                //}
                //DO SALVA: Llamamos al algoritmo de validación de Persona.
                base.CheckInsertPreconditions(customerContactPerson.Person, customerContactPerson.CustomerID, CategoryPersonKeyEnum.CustContactPerson,
                                              forceSave, true, true, out homonymPersons, elementBL);
                break;

            case StatusEntityValue.Updated:
                //int id2 = _personDA.GetPerson(personFind);
                //if ((id2 > 0) && (id2 != customerContactPerson.Person.ID))
                //{
                //    throw new Exception(string.Format(Properties.Resources.MSG_PersonAlreadyExists, string.Concat(customerContactPerson.Person.FirstName, " ", customerContactPerson.Person.LastName)));
                //}
                //DO SALVA
                base.CheckUpdatePreconditions(customerContactPerson.Person, customerContactPerson.CustomerID, CategoryPersonKeyEnum.CustContactPerson,
                                              forceSave, true, true, out homonymPersons, elementBL);
                break;
            }
        }
/*
 *      public CustomerContactPersonEntity GetCustomerContactPerson(int customerContactPersonID)
 *      {
 *          try
 *          {
 *              PersonBL personBL = new PersonBL();
 *
 *              DataSet ds = _customerContactPersonDA.GetCustomerContactPerson(customerContactPersonID);
 *              if ((ds.Tables != null) && (ds.Tables.Contains(SII.HCD.Administrative.Entities.TableNames.CustomerContactPersonTable)) && (ds.Tables[SII.HCD.Administrative.Entities.TableNames.CustomerContactPersonTable].Rows.Count > 0))
 *              {
 *                  int personID = SIIConvert.ToInteger(ds.Tables[SII.HCD.Administrative.Entities.TableNames.CustomerContactPersonTable].Rows[0]["PersonID"].ToString(), 0);
 *                  int contactTypeID = SIIConvert.ToInteger(ds.Tables[SII.HCD.Administrative.Entities.TableNames.CustomerContactPersonTable].Rows[0]["ContactTypeID"].ToString(), 0);
 *
 *                  DataSet ds2;
 *
 #region Contact Types
 *                  ds2 = _contactTypeDA.GetContactTypeByID(contactTypeID);
 *                  if ((ds2 != null) && (ds2.Tables.Contains(SII.HCD.Administrative.Entities.TableNames.ContactTypeTable)))
 *                  {
 *                      DataTable dt = ds2.Tables[SII.HCD.Administrative.Entities.TableNames.ContactTypeTable].Copy();
 *                      ds.Tables.Add(dt);
 *                  }
 #endregion
 *
 #region Person
 *                  if (personID <= 0)
 *                  {
 *                      throw new Exception(Properties.Resources.ERROR_CustomerContactPersonNotFound);
 *                  }
 *                  SII.HCD.BackOffice.Entities.PersonEntity myPerson = personBL.GetPerson(personID);
 #endregion
 *
 *                  CustomerContactPersonAdvancedAdapter customerContactPersonAdapter = new CustomerContactPersonAdvancedAdapter();
 *                  CustomerContactPersonEntity result = customerContactPersonAdapter.GetInfo(ds.Tables[SII.HCD.Administrative.Entities.TableNames.CustomerContactPersonTable].Rows[0], ds);
 *                  result.Person = myPerson;
 *                  LOPDLogger.Write(EntityNames.CustomerContactPersonEntityName, customerContactPersonID, ActionType.View);
 *                  return result;
 *              }
 *              else
 *                  return null;
 *          }
 *          catch (Exception ex)
 *          {
 *              if (ExceptionPolicy.HandleException(ex, ExceptionPolicies.Service)) throw;
 *              return null;
 *          }
 *      }
 */
        public CustomerContactPersonEntity GetCustomerContactPerson(int customerContactPersonID)
        {
            try
            {
                #region Person
                PersonBL personBL = new PersonBL();
                int      personID = 0;
                personID = personBL.obtenerPersonID_From_CustomerContactPerson(customerContactPersonID);

                if (personID == 0)
                {
                    throw new Exception(Properties.Resources.ERROR_CustomerContactPersonNotFound);
                }
                PersonEntity myPerson   = null;
                var          HiloPerson = System.Threading.Tasks.Task.Factory.StartNew(() => myPerson = personBL.GetPerson(personID));
                #endregion

                DataSet ds = _customerContactPersonDA.GetCustomerContactPerson(customerContactPersonID);
                if ((ds.Tables != null) && (ds.Tables.Contains(Entities.TableNames.CustomerContactPersonTable)) && (ds.Tables[Entities.TableNames.CustomerContactPersonTable].Rows.Count > 0))
                {
                    DataSet ds2 = new DataSet();
                    foreach (DataTable oTabla in ds.Tables)
                    {
                        if (oTabla.Rows.Count > 0)
                        {
                            ds2.Tables.Add(oTabla.Copy());
                        }
                    }

                    CustomerContactPersonAdvancedAdapter customerContactPersonAdapter = new CustomerContactPersonAdvancedAdapter();
                    CustomerContactPersonEntity          result = customerContactPersonAdapter.GetInfo(ds.Tables[Entities.TableNames.CustomerContactPersonTable].Rows[0], ds2);
                    HiloPerson.Wait();
                    result.Person = myPerson;
                    LOPDLogger.Write(EntityNames.CustomerContactPersonEntityName, customerContactPersonID, ActionType.View);
                    ds2.Dispose();
                    ds.Dispose();
                    return(result);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, ExceptionPolicies.Service))
                {
                    throw;
                }
                return(null);
            }
        }
        private CustomerContactPersonEntity InnerUpdate(CustomerContactPersonEntity customerContactPerson, string userName)
        {
            Int64 dbTimeStamp = _customerContactPersonDA.GetDBTimeStamp(customerContactPerson.ID);

            if (dbTimeStamp != customerContactPerson.DBTimeStamp)
            {
                throw new Exception(
                          string.Format(Properties.Resources.MSG_ConcurrencyUpdateWarning, customerContactPerson.ID));
            }

            _customerContactPersonDA.Update(customerContactPerson.ID, customerContactPerson.CustomerID,
                                            (customerContactPerson.ContactType == null) ? 0 : customerContactPerson.ContactType.ID, customerContactPerson.UrgentContact,
                                            customerContactPerson.AlternativeContact, userName);

            customerContactPerson.DBTimeStamp = _customerContactPersonDA.GetDBTimeStamp(customerContactPerson.ID);

            return(customerContactPerson);
        }
 private void ResetCustomerContactPerson(CustomerContactPersonEntity customerContactPerson)
 {
     customerContactPerson.EditStatus.Reset();
     base.ResetPerson(customerContactPerson.Person);
 }
        public CustomerContactPersonEntity Save(CustomerContactPersonEntity customerContactPerson, bool forceSave, out PersonAddressListDTO[] homonymPersons)
        {
            try
            {
                if (customerContactPerson == null)
                {
                    throw new ArgumentNullException("customerContactPerson");
                }

                ElementBL _elementBL = new ElementBL();
                homonymPersons = null;

                switch (customerContactPerson.EditStatus.Value)
                {
                case StatusEntityValue.Deleted:
                    return(customerContactPerson);

                case StatusEntityValue.New:
                    CheckInsertPreconditions(customerContactPerson, forceSave, out homonymPersons, _elementBL);
                    if (homonymPersons != null)
                    {
                        return(customerContactPerson);
                    }
                    return(this.Insert(customerContactPerson));

                case StatusEntityValue.NewAndDeleted:
                    return(customerContactPerson);

                case StatusEntityValue.None:
                    CheckUpdatePreconditions(customerContactPerson, forceSave, out homonymPersons, _elementBL);
                    if (homonymPersons != null)
                    {
                        return(customerContactPerson);
                    }
                    if ((customerContactPerson.Person != null) && (customerContactPerson.Person.EditStatus.Value == StatusEntityValue.Updated))
                    {
                        customerContactPerson.Person = base.Update(customerContactPerson.Person);
                    }
                    return(customerContactPerson);

                case StatusEntityValue.Updated:
                    CheckUpdatePreconditions(customerContactPerson, forceSave, out homonymPersons, _elementBL);
                    if (homonymPersons != null)
                    {
                        return(customerContactPerson);
                    }
                    return(this.Update(customerContactPerson));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            catch (Exception ex)
            {
                if (ExceptionPolicy.HandleException(ex, ExceptionPolicies.Service))
                {
                    throw;
                }
                homonymPersons = null;
                return(null);
            }
        }