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"); } }
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); }