public function getList()
 {
     $integration_merchant = Module::loadEntity('IntegrationMerchant', Module::getApiPublicKey(), 'apiPublicKey');
     $user = Module::loadEntity('User', $integration_merchant->getId(), 'integrationMerchant');
     if ($integration_merchant) {
         $userData = array('name' => $user->getName(), 'identification_document' => $user->getIdentificationDocument(), 'email' => $user->getEmail(), 'phone_number' => $user->getPhoneNumber(), 'register' => $user->getRegister());
         $result = array('merchant_id' => $integration_merchant->getApiPublicKey(), 'user' => $userData);
         return new JsonModel($result);
     } else {
         $this->controller->getResponse()->setStatusCode(404);
         throw new \Exception('Merchant Not Found');
     }
 }
 /**
  * Carregar uma Entidade existente
  *
  * @param  string $nameEntity
  * @param  string $idValue
  * @param  string $idCode
  * @return Bazaron\Entity\AbstractEntity
  */
 public function loadEntity($nameEntity, $idValue, $idCode = 'id')
 {
     return Module::loadEntity($nameEntity, $idValue, $idCode);
 }
 public function create($data)
 {
     $headerContent = $this->controller->getRequest()->getHeaders();
     $document = $headerContent->get('Document');
     $isNewMerchant = $headerContent->get('isNewMerchant');
     $nameCity = $headerContent->get('City');
     $country = $headerContent->get('Country');
     $state = $headerContent->get('State');
     $cep = $headerContent->get('PostalCode');
     $address = $headerContent->get('Address');
     $neighborhood = $headerContent->get('Neighborhood');
     $name = $headerContent->get('Name');
     $rg = $headerContent->get('Rg');
     $email = $headerContent->get('Email');
     $password = $headerContent->get('Password');
     $phoneNumber = $headerContent->get('PhoneNumber');
     if (!$document) {
         $this->controller->getResponse()->setStatusCode(401);
         throw new \Exception('Document Is Required');
     }
     $merchant = null;
     $sysLanguage = Module::getRepository('SystemLanguage')->findOneBy(array('name' => Module::getMerchantLanguage()));
     if ($isNewMerchant) {
         $checkIsNewMerchant = $isNewMerchant->getFieldValue() == "true" ? true : intval($isNewMerchant->getFieldValue());
         if (!$checkIsNewMerchant) {
             $this->controller->getResponse()->setStatusCode(401);
             throw new \Exception('Request Failure');
         }
         if (!Module::getApiPublicKey()) {
             $this->controller->getResponse()->setStatusCode(401);
             throw new \Exception('MERCHANT-ID Is Required');
         }
         $existingMerchant = Module::getRepository('Merchant')->findMerchantWithPublicKey(Module::getApiPublicKey());
         $merchant = $existingMerchant;
         if (empty($merchant->getApiPrivateKey())) {
             $merchant = Module::loadEntity('Merchant', $merchant->getId());
             $userDocument = Module::getRepository('User')->findOneBy(array('merchant' => Module::getRepository('Merchant')->findOneBy(array('apiPublicKey' => Module::getApiPublicKey()))));
             $merchant->setApiPrivateKey(time() . $merchant->getApiPublicKey() . $userDocument->getDocument() . time())->setApiPublicKey(time() . $userDocument->getDocument() . time())->save();
         } else {
             $this->controller->getResponse()->setStatusCode(302);
             throw new \Exception('User Already Authenticated');
         }
         return new JsonModel(array('success' => true, 'merchant_id' => $merchant->getApiPublicKey()));
     } else {
         if (!$nameCity || !$country || !$state || !$cep || !$address || !$neighborhood || !$name || !$rg || !$email || !$password || !$phoneNumber) {
             $this->controller->getResponse()->setStatusCode(401);
             throw new \Exception('All Fields Are Necessary');
         }
     }
     $existingUser = Module::getRepository('User')->findUserByDocument($document->getFieldValue());
     if (!$existingUser) {
         $existingCity = Module::getRepository('City')->findUniqueCity($nameCity->getFieldValue(), $country->getFieldValue(), $state->getFieldValue());
         $city = $existingCity;
         if (!$existingCity) {
             $city = Module::newEntity('City');
             $city->setName($nameCity->getFieldValue())->setCountry($country->getFieldValue())->setState($state->getFieldValue())->save();
         }
         $addressEntity = Module::newEntity('Address');
         $addressEntity->setCity($city)->setCep($cep->getFieldValue())->setSuperscription($address->getFieldValue())->setNeighborhood($neighborhood->getFieldValue())->save();
         $merchant = Module::newEntity('Merchant');
         $merchant->setLanguage($sysLanguage)->setApiPrivateKey("")->setApiPublicKey(time() . $document->getFieldValue() . time())->save();
         $user = Module::newEntity('User');
         $user->setDocument($document->getFieldValue())->setMerchant($merchant)->setAddress($addressEntity)->setName($name->getFieldValue())->setIdentificationDocument($rg->getFieldValue())->setEmail($email->getFieldValue())->setPassword($password->getFieldValue())->setPhoneNumber($phoneNumber->getFieldValue())->save();
     } else {
         $this->controller->getResponse()->setStatusCode(302);
         throw new \Exception('User Already Exists');
     }
     return new JsonModel(array('success' => true, 'merchant_id' => $merchant->getApiPublicKey()));
 }
 public function configure($options)
 {
     if ($options == null) {
         return $this;
     }
     if (!$options instanceof Traversable && !is_array($options)) {
         throw new \Exception('$options should implement Traversable');
     }
     foreach ($options as $name => &$value) {
         $funcset = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));
         $funcset_id = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -3))));
         $funcset_cod = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -4))));
         $funcadd = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));
         $funcadd_id = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -3))));
         $funcadd_cod = 'add' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -4))));
         $funcget = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));
         $funcget_id = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -3))));
         $funcget_cod = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', substr($name, 0, -4))));
         if (method_exists($this, $funcset)) {
             call_user_func(array($this, $funcset), $value);
         } else {
             if (method_exists($this, $funcset_id) && substr($name, -3) == '_id') {
                 $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -3))), $value, 'id');
                 call_user_func(array($this, $funcset_id), $entity);
             } else {
                 if (method_exists($this, $funcset_cod) && substr($name, -4) == '_cod') {
                     $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -4))), $value, 'cod');
                     call_user_func(array($this, $funcset_cod), $entity);
                 } else {
                     if (method_exists($this, $funcadd)) {
                         if (is_array($value)) {
                             call_user_func(array($this, $funcget))->clear();
                             foreach ($value as $v) {
                                 call_user_func(array($this, $funcadd), $v);
                             }
                         } else {
                             call_user_func(array($this, $funcadd), $value);
                         }
                     } else {
                         if (method_exists($this, $funcadd_id) && substr($name, -3) == '_id') {
                             if (is_array($value)) {
                                 call_user_func(array($this, $funcget_id))->clear();
                                 foreach ($value as $v) {
                                     $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -3))), $v, 'id');
                                     call_user_func(array($this, $funcadd_id), $entity);
                                 }
                             } else {
                                 $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -3))), $value, 'id');
                                 call_user_func(array($this, $funcadd_id), $entity);
                             }
                         } else {
                             if (method_exists($this, $funcadd_cod) && substr($name, -4) == '_cod') {
                                 if (is_array($value)) {
                                     call_user_func(array($this, $funcget_cod))->clear();
                                     foreach ($value as $v) {
                                         $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -4))), $v, 'cod');
                                         call_user_func(array($this, $funcadd_cod), $entity);
                                     }
                                 } else {
                                     $entity = Module::loadEntity(ucwords(str_replace('_', ' ', substr($name, 0, -4))), $value, 'cod');
                                     call_user_func(array($this, $funcadd_cod), $entity);
                                 }
                             } else {
                                 continue;
                                 // instead of throwing an exception
                             }
                         }
                     }
                 }
             }
         }
     }
     return $this;
 }