public function put($recordDetails, $user)
 {
     $this->user = $user;
     $recordDetails = $this->syncToNativeFormat($recordDetails);
     $createdRecords = $recordDetails['created'];
     $updatedRecords = $recordDetails['updated'];
     $deletedRecords = $recordDetails['deleted'];
     if (count($createdRecords) > 0) {
         $createdRecords = $this->translateReferenceFieldNamesToIds($createdRecords, $user);
         $createdRecords = $this->fillNonExistingMandatoryPicklistValues($createdRecords);
     }
     foreach ($createdRecords as $index => $record) {
         $createdRecords[$index] = vtws_create($record['module'], $record, $this->user);
     }
     if (count($updatedRecords) > 0) {
         $updatedRecords = $this->translateReferenceFieldNamesToIds($updatedRecords, $user);
     }
     $crmIds = array();
     foreach ($updatedRecords as $index => $record) {
         $webserviceRecordId = $record["id"];
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         $crmIds[] = $recordIdComp[1];
     }
     $assignedRecordIds = wsapp_checkIfRecordsAssignToUser($crmIds, $this->user->id);
     foreach ($updatedRecords as $index => $record) {
         $webserviceRecordId = $record["id"];
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         if (in_array($recordIdComp[1], $assignedRecordIds)) {
             $updatedRecords[$index] = vtws_revise($record, $this->user);
         } else {
             $this->assignToChangedRecords[$index] = $record;
         }
     }
     $hasDeleteAccess = null;
     $deletedCrmIds = array();
     foreach ($deletedRecords as $index => $record) {
         $webserviceRecordId = $record;
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         $deletedCrmIds[] = $recordIdComp[1];
     }
     $assignedDeletedRecordIds = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $this->user->id);
     foreach ($deletedRecords as $index => $record) {
         $idComp = vtws_getIdComponents($record);
         if (empty($hasDeleteAccess)) {
             $handler = vtws_getModuleHandlerFromId($idComp[0], $this->user);
             $meta = $handler->getMeta();
             $hasDeleteAccess = $meta->hasDeleteAccess();
         }
         if ($hasDeleteAccess) {
             if (in_array($idComp[1], $assignedDeletedRecordIds)) {
                 vtws_delete($record, $this->user);
             }
         }
     }
     $recordDetails['created'] = $createdRecords;
     $recordDetails['updated'] = $updatedRecords;
     $recordDetails['deleted'] = $deletedRecords;
     return $this->nativeToSyncFormat($recordDetails);
 }
 public function updateParent($createdElement, $parent)
 {
     $discount = 0;
     $parentId = vtws_getIdComponents($parent['id']);
     $parentId = $parentId[1];
     $lineItemList = $this->getAllLineItemForParent($parentId);
     $parent['hdnSubTotal'] = 0;
     $taxAmount = 0;
     foreach ($lineItemList as $lineItem) {
         $discount = 0;
         $lineItemTotal = $lineItem['listprice'] * $lineItem['quantity'];
         $lineItem['discount_amount'] = (double) $lineItem['discount_amount'];
         $lineItem['discount_percent'] = (double) $lineItem['discount_percent'];
         if (!empty($lineItem['discount_amount'])) {
             $discount = $lineItem['discount_amount'];
         } elseif (!empty($lineItem['discount_percent'])) {
             $discount = $lineItem['discount_percent'] / 100 * $lineItemTotal;
         }
         $this->initTax($lineItem, $parent);
         $lineItemTotal = $lineItemTotal - $discount;
         $parent['hdnSubTotal'] = $parent['hdnSubTotal'] + $lineItemTotal;
         if (strcasecmp($parent['hdnTaxType'], $this->Individual) === 0) {
             foreach ($this->taxList as $taxInfo) {
                 $lineItemTaxAmount = $taxInfo['percentage'] / 100 * $lineItemTotal;
                 $parent['hdnSubTotal'] += $lineItemTaxAmount;
             }
         }
     }
     if (!empty($parent['hdnDiscountAmount']) && (double) $parent['hdnDiscountAmount'] > 0) {
         $discount = $parent['hdnDiscountAmount'];
     } elseif (!empty($parent['hdnDiscountPercent'])) {
         $discount = $parent['hdnDiscountPercent'] / 100 * $parent['hdnSubTotal'];
     }
     $parent['pre_tax_total'] = $total = $parent['hdnSubTotal'] - $discount + $parent['hdnS_H_Amount'];
     $taxTotal = $parent['hdnSubTotal'] - $discount;
     if (strcasecmp($parent['hdnTaxType'], $this->Individual) !== 0) {
         $this->initTax($createdElement, $parent);
         foreach ($this->taxList as $taxInfo) {
             $taxAmount += $taxInfo['percentage'] / 100 * $taxTotal;
         }
     }
     $shippingTax = getAllTaxes('all', 'sh', 'edit', $parentId);
     $shippingTaxInfo = array();
     foreach ($shippingTax as $taxInfo) {
         $taxAmount += $taxInfo['percentage'] / 100 * $parent['hdnS_H_Amount'];
         $shippingTaxInfo[$taxInfo['taxname']] = $taxInfo['percentage'];
     }
     $parent['hdnGrandTotal'] = $total + $taxAmount + $parent['txtAdjustment'];
     $parentTypeHandler = vtws_getModuleHandlerFromId($parent['id'], $this->user);
     $parentTypeMeta = $parentTypeHandler->getMeta();
     $parentType = $parentTypeMeta->getEntityName();
     $parentInstance = CRMEntity::getInstance($parentType);
     $sql = 'update ' . $parentInstance->table_name . ' set subtotal=?, total=?, pre_tax_total=? where ' . $parentInstance->tab_name_index[$parentInstance->table_name] . '=?';
     $params = array($parent['hdnSubTotal'], $parent['hdnGrandTotal'], $parent['pre_tax_total'], $parentId);
     $transactionSuccessful = vtws_runQueryAsTransaction($sql, $params, $result);
     self::$parentCache[$parent['id']] = $parent;
     if (!$transactionSuccessful) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
 }
Example #3
0
 function sanitizeForInsert($row, $meta)
 {
     global $adb;
     $associatedToUser = false;
     $parentTypeId = null;
     if (strtolower($meta->getEntityName()) == "emails") {
         if (isset($row['parent_id'])) {
             $components = vtws_getIdComponents($row['parent_id']);
             $userObj = VtigerWebserviceObject::fromName($adb, 'Users');
             $parentTypeId = $components[0];
             if ($components[0] == $userObj->getEntityId()) {
                 $associatedToUser = true;
             }
         }
     }
     // added to handle the setting reminder time
     if (strtolower($meta->getEntityName()) == "events") {
         if (isset($row['reminder_time']) && $row['reminder_time'] != null && $row['reminder_time'] != 0) {
             $_REQUEST['set_reminder'] = "Yes";
             $_REQUEST['mode'] = 'edit';
             $reminder = $row['reminder_time'];
             $seconds = (int) $reminder % 60;
             $minutes = (int) ($reminder / 60) % 60;
             $hours = (int) ($reminder / (60 * 60)) % 24;
             $days = (int) ($reminder / (60 * 60 * 24));
             //at vtiger there cant be 0 minutes reminder so we are setting to 1
             if ($minutes == 0) {
                 $minutes = 1;
             }
             $_REQUEST['remmin'] = $minutes;
             $_REQUEST['remhrs'] = $hours;
             $_REQUEST['remdays'] = $days;
         } else {
             $_REQUEST['set_reminder'] = "No";
         }
         if (isset($row['contact_id']) and strpos($row['contact_id'], ';') !== false) {
             $ctowsids = array();
             $listofctos = explode(';', $row['contact_id']);
             foreach ($listofctos as $cto) {
                 if (strpos($cto, 'x') !== false) {
                     $ctowsid = vtws_getIdComponents($cto);
                     $ctowsids[] = $ctowsid[1];
                 } else {
                     $ctowsids[] = $cto;
                 }
             }
             $row['contact_id'] = implode(';', $ctowsids);
         }
     } elseif (strtolower($meta->getEntityName()) == "calendar") {
         if (empty($row['sendnotification']) || strtolower($row['sendnotificaiton']) == 'no' || $row['sendnotificaiton'] == '0' || $row['sendnotificaiton'] == 'false' || strtolower($row['sendnotificaiton']) == 'n') {
             unset($row['sendnotification']);
         }
     }
     $references = $meta->getReferenceFieldDetails();
     foreach ($references as $field => $typeList) {
         if (strpos($row[$field], 'x') !== false) {
             $row[$field] = vtws_getIdComponents($row[$field]);
             $row[$field] = $row[$field][1];
         }
     }
     $ownerFields = $meta->getOwnerFields();
     foreach ($ownerFields as $index => $field) {
         if (isset($row[$field]) && $row[$field] != null) {
             $ownerDetails = vtws_getIdComponents($row[$field]);
             $row[$field] = $ownerDetails[1];
         }
     }
     if (strtolower($meta->getEntityName()) == "emails") {
         if (isset($row['parent_id'])) {
             if ($associatedToUser === true) {
                 $_REQUEST['module'] = 'Emails';
                 $row['parent_id'] = $row['parent_id'] . "@-1|";
                 $_REQUEST['parent_id'] = $row['parent_id'];
             } else {
                 $referenceHandler = vtws_getModuleHandlerFromId($parentTypeId, $meta->getUser());
                 $referenceMeta = $referenceHandler->getMeta();
                 $fieldId = getEmailFieldId($referenceMeta, $row['parent_id']);
                 $row['parent_id'] .= "@{$fieldId}|";
             }
         }
     }
     if ($row["id"]) {
         unset($row["id"]);
     }
     if (isset($row[$meta->getObectIndexColumn()])) {
         unset($row[$meta->getObectIndexColumn()]);
     }
     $row = DataTransform::sanitizeDateFieldsForInsert($row, $meta);
     $row = DataTransform::sanitizeCurrencyFieldsForInsert($row, $meta);
     return $row;
 }
 public function put($recordDetails, $user)
 {
     $log = vglobal('log');
     $this->user = $user;
     $recordDetails = $this->syncToNativeFormat($recordDetails);
     $createdRecords = $recordDetails['created'];
     $updatedRecords = $recordDetails['updated'];
     $deletedRecords = $recordDetails['deleted'];
     if (count($createdRecords) > 0) {
         $createdRecords = $this->translateReferenceFieldNamesToIds($createdRecords, $user);
         $createdRecords = $this->fillNonExistingMandatoryPicklistValues($createdRecords);
         $createdRecords = $this->fillMandatoryFields($createdRecords, $user);
     }
     foreach ($createdRecords as $index => $record) {
         $createdRecords[$index] = vtws_create($record['module'], $record, $this->user);
     }
     if (count($updatedRecords) > 0) {
         $updatedRecords = $this->translateReferenceFieldNamesToIds($updatedRecords, $user);
     }
     $crmIds = array();
     foreach ($updatedRecords as $index => $record) {
         $webserviceRecordId = $record["id"];
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         $crmIds[] = $recordIdComp[1];
     }
     $assignedRecordIds = array();
     if ($this->isClientUserSyncType()) {
         $assignedRecordIds = wsapp_checkIfRecordsAssignToUser($crmIds, $this->user->id);
         // To check if the record assigned to group
         if ($this->isClientUserAndGroupSyncType()) {
             $getUserGroups = new GetUserGroups();
             $getUserGroups->getAllUserGroups($this->user->id);
             $groupIds = $getUserGroups->user_groups;
             if (!empty($groupIds)) {
                 $groupRecordId = wsapp_checkIfRecordsAssignToUser($crmIds, $groupIds);
                 $assignedRecordIds = array_merge($assignedRecordIds, $groupRecordId);
             }
         }
         // End
     }
     foreach ($updatedRecords as $index => $record) {
         $webserviceRecordId = $record["id"];
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         try {
             if (in_array($recordIdComp[1], $assignedRecordIds)) {
                 $updatedRecords[$index] = vtws_revise($record, $this->user);
             } else {
                 if (!$this->isClientUserSyncType()) {
                     $updatedRecords[$index] = vtws_revise($record, $this->user);
                 } else {
                     $this->assignToChangedRecords[$index] = $record;
                 }
             }
         } catch (Exception $e) {
             continue;
         }
         // Added to handle duplication
         if ($record['duplicate']) {
             $updatedRecords[$index]['duplicate'] = true;
         }
         // End
     }
     $hasDeleteAccess = null;
     $deletedCrmIds = array();
     foreach ($deletedRecords as $index => $record) {
         $webserviceRecordId = $record;
         $recordIdComp = vtws_getIdComponents($webserviceRecordId);
         $deletedCrmIds[] = $recordIdComp[1];
     }
     $assignedDeletedRecordIds = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $this->user->id);
     // To get record id's assigned to group of the current user
     if ($this->isClientUserAndGroupSyncType()) {
         if (!empty($groupIds)) {
             foreach ($groupIds as $group) {
                 $groupRecordId = wsapp_checkIfRecordsAssignToUser($deletedCrmIds, $group);
                 $assignedDeletedRecordIds = array_merge($assignedDeletedRecordIds, $groupRecordId);
             }
         }
     }
     // End
     foreach ($deletedRecords as $index => $record) {
         $idComp = vtws_getIdComponents($record);
         if (empty($hasDeleteAccess)) {
             $handler = vtws_getModuleHandlerFromId($idComp[0], $this->user);
             $meta = $handler->getMeta();
             $hasDeleteAccess = $meta->hasDeleteAccess();
         }
         if ($hasDeleteAccess) {
             if (in_array($idComp[1], $assignedDeletedRecordIds)) {
                 try {
                     vtws_delete($record, $this->user);
                 } catch (Exception $e) {
                     continue;
                 }
             }
         }
     }
     $recordDetails['created'] = $createdRecords;
     $recordDetails['updated'] = $updatedRecords;
     $recordDetails['deleted'] = $deletedRecords;
     return $this->nativeToSyncFormat($recordDetails);
 }