--- /dev/null
+<?php
+
+
+class SugarFicheInstallation {
+
+ const SUGAR_MODULE_NAME = "Opportunities";
+
+ /** @var SugarWrapper */
+ private $sugarWrapper;
+
+ public function __construct(SugarWrapper $sugarWrapper) {
+ $this->sugarWrapper = $sugarWrapper;
+ }
+
+ public function edit(ApplianceVersion $applianceVersion) {
+ if($this->isOnSugar($applianceVersion)){
+ return $this->update($applianceVersion);
+ }
+ return $this->create($applianceVersion);
+ }
+
+ public function isOnSugar($applianceVersion){
+ if(! $applianceVersion->sugar_id){
+ return false;
+ }
+ return $this->sugarWrapper->entryExists(self::SUGAR_MODULE_NAME,$applianceVersion->sugar_id);
+ }
+
+ public function create(ApplianceVersion $applianceVersion){
+ $applianceVersion->sugar_id = $this->update($applianceVersion);
+ $pdoApplianeVersion = new PdoApplianceVersionManager();
+ $pdoApplianeVersion->edit($applianceVersion);
+ return $applianceVersion->sugar_id;
+ }
+
+ public function update(ApplianceVersion $applianceVersion){
+
+ $pdoApplianceManager = new PdoApplianceManager();
+ $appliance = $pdoApplianceManager->getAppliance($applianceVersion->appliance_id);
+
+ $pdoContractManager = new PdoContractManager();
+ $contract = $pdoContractManager->getContract($appliance->contract_id);
+
+ $pdoCustomerManager = new PdoCustomerManager();
+ $customer = $pdoCustomerManager->getCustomer($contract->customer_id);
+
+ $pdoProductManager = new PdoProductManager();
+ $product = $pdoProductManager->getProduct($appliance->product);
+
+ $pdoVersionManager = new PdoVersionManager();
+ $version = $pdoVersionManager->getVersion($applianceVersion->version_id);
+
+ $pdoChannelManager = new PdoChannelManager();
+ $channel = $pdoChannelManager->getChannel($appliance->channel_id);
+
+ $sugar_info = $this->getInfoForSugar($applianceVersion,$appliance);
+
+ if ($channel){
+ $sugar_info['type_exploitation_c'] = $channel->channel_key;
+ }
+
+ $pdoTypeHebergementManager = new PdoTypeHebergementManager();
+ $typeHebergement = $pdoTypeHebergementManager->getTypeHebergement($appliance->type_hebergement_id);
+
+ if($typeHebergement){
+ $sugar_info['liste_hebergement_c'] = $typeHebergement->type_hebergement_key;
+ }
+
+ $info = $this->sugarWrapper->setEntry(self::SUGAR_MODULE_NAME,$sugar_info);
+ if (empty($info['id'])){
+ throw new Exception("Impossible d'éditer la fiche Sugar");
+ }
+ $sugar_id = $info['id'];
+ $this->updateAccountsOpportuniesLink($sugar_id,$customer->sugar_id);
+ $this->updateProductOpportunitiesLink($sugar_id,$product->sugar_id);
+ $this->updateProduitVersionneLink($sugar_id,$version->sugar_id);
+
+ return $sugar_id;
+ }
+
+ private function getInfoForSugar(ApplianceVersion $applianceVersion, Appliance $appliance){
+ $info['id'] = $applianceVersion->sugar_id;
+ $info['name'] = strstr($appliance->reference,"_",true);
+ $info['date_opened_c'] = $applianceVersion->creation_date;
+ $info['description'] = "Fiche éditée par Allo";
+ $info['systeme_d_exploitation_c']= $appliance->os;
+ return $info;
+ }
+
+ private function updateAccountsOpportuniesLink($opportunity_sugar_id, $account_sugar_id){
+ $this->sugarWrapper->createRelationship(
+ self::SUGAR_MODULE_NAME,
+ $opportunity_sugar_id,
+ 'accounts',
+ $account_sugar_id
+ );
+ $this->sugarWrapper->createRelationship(
+ 'Accounts',
+ $account_sugar_id,
+ 'opportunities',
+ $opportunity_sugar_id
+ );
+ }
+
+ private function updateProductOpportunitiesLink($opportunity_sugar_id,$produit_sugar_id){
+ $this->sugarWrapper->createRelationship(
+ 'maint_catalogue_produits',
+ $produit_sugar_id,
+ 'maint_caits_opportunities',
+ $opportunity_sugar_id
+ );
+ }
+
+ private function updateProduitVersionneLink($opportunity_sugar_id,$version_sugar_id){
+ $this->sugarWrapper->createRelationship(
+ "adul__Produits",
+ $version_sugar_id,
+ "adul__prits_opportunities",
+ $opportunity_sugar_id
+ );
+ }
+
+
+}
\ No newline at end of file