Esempio n. 1
0
 protected function action_addToProspectList()
 {
     global $beanList;
     require_once 'modules/Relationships/Relationship.php';
     require_once 'modules/ProspectLists/ProspectList.php';
     $prospectList = new ProspectList();
     $prospectList->retrieve($_REQUEST['prospect_id']);
     $module = new $beanList[$this->bean->report_module]();
     $key = Relationship::retrieve_by_modules($this->bean->report_module, 'ProspectLists', $GLOBALS['db']);
     if (!empty($key)) {
         $sql = $this->bean->build_report_query();
         $result = $this->bean->db->query($sql);
         $beans = array();
         while ($row = $this->bean->db->fetchByAssoc($result)) {
             if (isset($row[$module->table_name . '_id'])) {
                 $beans[] = $row[$module->table_name . '_id'];
             }
         }
         if (!empty($beans)) {
             foreach ($prospectList->field_defs as $field => $def) {
                 if ($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $key) {
                     $prospectList->load_relationship($field);
                     $prospectList->{$field}->add($beans);
                 }
             }
         }
     }
     die;
 }
Esempio n. 2
0
 /**
  * This function is a good location to save changes that have been made to a relationship.
  * This should be overriden in subclasses that have something to save.
  *
  * @param $is_update true if this save is an update.
  */
 function save_relationship_changes($is_update, $exclude = array())
 {
     $new_rel_id = false;
     $new_rel_link = false;
     //this allows us to dynamically relate modules without adding it to the relationship_fields array
     if (!empty($_REQUEST['relate_id']) && !empty($_REQUEST['relate_to']) && !in_array($_REQUEST['relate_to'], $exclude) && $_REQUEST['relate_id'] != $this->id) {
         $new_rel_id = $_REQUEST['relate_id'];
         $new_rel_relname = $_REQUEST['relate_to'];
         if (!empty($this->in_workflow) && !empty($this->not_use_rel_in_req)) {
             $new_rel_id = $this->new_rel_id;
             $new_rel_relname = $this->new_rel_relname;
         }
         $new_rel_link = $new_rel_relname;
         //Try to find the link in this bean based on the relationship
         foreach ($this->field_defs as $key => $def) {
             if (isset($def['type']) && $def['type'] == 'link' && isset($def['relationship']) && $def['relationship'] == $new_rel_relname) {
                 $new_rel_link = $key;
             }
         }
     }
     // First we handle the preset fields listed in the fixed relationship_fields array hardcoded into the OOB beans
     // TODO: remove this mechanism and replace with mechanism exclusively based on the vardefs
     if (isset($this->relationship_fields) && is_array($this->relationship_fields)) {
         foreach ($this->relationship_fields as $id => $rel_name) {
             if (in_array($id, $exclude)) {
                 continue;
             }
             if (!empty($this->{$id})) {
                 $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - adding a relationship record: ' . $rel_name . ' = ' . $this->{$id});
                 //already related the new relationship id so let's set it to false so we don't add it again using the _REQUEST['relate_i'] mechanism in a later block
                 if ($this->{$id} == $new_rel_id) {
                     $new_rel_id = false;
                 }
                 $this->load_relationship($rel_name);
                 $this->{$rel_name}->add($this->{$id});
                 $related = true;
             } else {
                 //if before value is not empty then attempt to delete relationship
                 if (!empty($this->rel_fields_before_value[$id])) {
                     $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - attempting to remove the relationship record, using relationship attribute' . $rel_name);
                     $this->load_relationship($rel_name);
                     $this->{$rel_name}->delete($this->id, $this->rel_fields_before_value[$id]);
                 }
             }
         }
     }
     /*      Next, we'll attempt to update all of the remaining relate fields in the vardefs that have 'save' set in their field_def
             Only the 'save' fields should be saved as some vardef entries today are not for display only purposes and break the application if saved
             If the vardef has entries for field <a> of type relate, where a->id_name = <b> and field <b> of type link
             then we receive a value for b from the MVC in the _REQUEST, and it should be set in the bean as $this->$b
     */
     foreach ($this->field_defs as $def) {
         if ($def['type'] == 'relate' && isset($def['id_name']) && isset($def['link']) && isset($def['save'])) {
             if (in_array($def['id_name'], $exclude) || in_array($def['id_name'], $this->relationship_fields)) {
                 continue;
             }
             // continue to honor the exclude array and exclude any relationships that will be handled by the relationship_fields mechanism
             if (isset($this->field_defs[$def['link']])) {
                 $linkfield = $this->field_defs[$def['link']];
                 if ($this->load_relationship($def['link'])) {
                     if (!empty($this->rel_fields_before_value[$def['id_name']])) {
                         //if before value is not empty then attempt to delete relationship
                         $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to remove the relationship record: {$def['link']} = {$this->rel_fields_before_value[$def['id_name']]}");
                         $this->{$def}['link']->delete($this->id, $this->rel_fields_before_value[$def['id_name']]);
                     }
                     if (!empty($this->{$def}['id_name']) && is_string($this->{$def}['id_name'])) {
                         $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to add a relationship record - {$def['link']} = {$this->{$def}['id_name']}");
                         $this->{$def}['link']->add($this->{$def}['id_name']);
                     }
                 } else {
                     $GLOBALS['log']->fatal("Failed to load relationship {$def['link']} while saving {$this->module_dir}");
                 }
             }
         }
     }
     // Finally, we update a field listed in the _REQUEST['*/relate_id']/_REQUEST['relate_to'] mechanism (if it hasn't already been updated above)
     if (!empty($new_rel_id)) {
         if ($this->load_relationship($new_rel_link)) {
             $this->{$new_rel_link}->add($new_rel_id);
         } else {
             $lower_link = strtolower($new_rel_link);
             if ($this->load_relationship($lower_link)) {
                 $this->{$lower_link}->add($new_rel_id);
             } else {
                 require_once 'data/Link.php';
                 $rel = Relationship::retrieve_by_modules($new_rel_link, $this->module_dir, $GLOBALS['db'], 'many-to-many');
                 if (!empty($rel)) {
                     foreach ($this->field_defs as $field => $def) {
                         if ($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $rel) {
                             $this->load_relationship($field);
                             $this->{$field}->add($new_rel_id);
                             return;
                         }
                     }
                     //ok so we didn't find it in the field defs let's save it anyway if we have the relationshp
                     $this->{$rel} = new Link($rel, $this, array());
                     $this->{$rel}->add($new_rel_id);
                 }
             }
         }
     }
 }
Esempio n. 3
0
$result = $this->bean->db->query($sql);
while ($row = $this->bean->db->fetchByAssoc($result)) {
    $row['id'] = '';
    $row['parent_id'] = $contract->id;
    $row['parent_type'] = 'AOS_Contracts';
    if ($row['product_cost_price'] != null) {
        $row['product_cost_price'] = format_number($row['product_cost_price']);
    }
    $row['product_list_price'] = format_number($row['product_list_price']);
    if ($row['product_discount'] != null) {
        $row['product_discount'] = format_number($row['product_discount']);
        $row['product_discount_amount'] = format_number($row['product_discount_amount']);
    }
    $row['product_unit_price'] = format_number($row['product_unit_price']);
    $row['vat_amt'] = format_number($row['vat_amt']);
    $row['product_total_price'] = format_number($row['product_total_price']);
    $row['product_qty'] = format_number($row['product_qty']);
    $row['group_id'] = $group_id_map[$row['group_id']];
    $prod_contract = new AOS_Products_Quotes();
    $prod_contract->populateFromRow($row);
    $prod_contract->save();
}
//Setting contract quote relationship
require_once 'modules/Relationships/Relationship.php';
$key = Relationship::retrieve_by_modules('AOS_Quotes', 'AOS_Contracts', $GLOBALS['db']);
if (!empty($key)) {
    $quote->load_relationship($key);
    $quote->{$key}->add($contract->id);
}
ob_clean();
header('Location: index.php?module=AOS_Contracts&action=EditView&record=' . $contract->id);
Esempio n. 4
0
 /**
  * Finally, we update a field listed in the _REQUEST['%/relate_id']/_REQUEST['relate_to'] mechanism (if it has not already been updated)
  *
  * @api
  * @see save_relationship_changes
  * @param string|boolean $new_rel_id
  * @param string $new_rel_link
  * @return boolean
  */
 protected function handle_request_relate($new_rel_id, $new_rel_link)
 {
     if (!empty($new_rel_id)) {
         if ($this->load_relationship($new_rel_link)) {
             return $this->{$new_rel_link}->add($new_rel_id);
         } else {
             $lower_link = strtolower($new_rel_link);
             if ($this->load_relationship($lower_link)) {
                 return $this->{$lower_link}->add($new_rel_id);
             } else {
                 require_once 'data/Link2.php';
                 $rel = Relationship::retrieve_by_modules($new_rel_link, $this->module_dir, $this->db, 'many-to-many');
                 if (!empty($rel)) {
                     foreach ($this->field_defs as $field => $def) {
                         if ($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $rel) {
                             $this->load_relationship($field);
                             return $this->{$field}->add($new_rel_id);
                         }
                     }
                     //ok so we didn't find it in the field defs let's save it anyway if we have the relationshp
                     $this->{$rel} = new Link2($rel, $this, array());
                     return $this->{$rel}->add($new_rel_id);
                 }
             }
         }
     }
     // nothing was saved so just return false;
     return false;
 }
 public function testretrieve_by_modules()
 {
     //unset and reconnect Db to resolve mysqli fetch exeception
     global $db;
     unset($db->database);
     $db->checkConnection();
     $relationship = new Relationship();
     //test with invalid relationship
     $result = $relationship->retrieve_by_modules('test1', 'test2', $db);
     $this->assertEquals(null, $result);
     //test with valid relationship but incorecct type
     $result = $relationship->retrieve_by_modules('Roles', 'Users', $db, 'one-to-many');
     $this->assertEquals(null, $result);
     //test with valid relationship and valid type
     $result = $relationship->retrieve_by_modules('Roles', 'Users', $db, 'many-to-many');
     $this->assertEquals('roles_users', $result);
 }
Esempio n. 6
0
/**
 * (Internal) Create a relationship between two beans.
 *
 * @param Array $set_relationship_value --
 *      'module1' -- The name of the module that the primary record is from.  This name should be the name the module was developed under (changing a tab name is studio does not affect the name that should be passed into this method)..
 *      'module1_id' -- The ID of the bean in the specified module
 *      'module2' -- The name of the module that the related record is from.  This name should be the name the module was developed under (changing a tab name is studio does not affect the name that should be passed into this method)..
 *      'module2_id' -- The ID of the bean in the specified module
 * @return Empty error on success, Error on failure
 */
function handle_set_relationship($set_relationship_value, $session = '')
{
    global $beanList, $beanFiles;
    $error = new SoapError();
    $module1 = $set_relationship_value['module1'];
    $module1_id = $set_relationship_value['module1_id'];
    $module2 = $set_relationship_value['module2'];
    $module2_id = $set_relationship_value['module2_id'];
    if (empty($beanList[$module1]) || empty($beanList[$module2])) {
        $error->set_error('no_module');
        return $error->get_soap_array();
    }
    $class_name = $beanList[$module1];
    require_once $beanFiles[$class_name];
    $mod = new $class_name();
    $mod->retrieve($module1_id);
    if (!$mod->ACLAccess('DetailView')) {
        $error->set_error('no_access');
        return $error->get_soap_array();
    }
    if ($module1 == "Contacts" && $module2 == "Users") {
        $key = 'contacts_users_id';
    } else {
        $key = array_search(strtolower($module2), $mod->relationship_fields);
        if (!$key) {
            $key = Relationship::retrieve_by_modules($module1, $module2, $GLOBALS['db']);
            // BEGIN SnapLogic fix for bug 32064
            if ($module1 == "Quotes" && $module2 == "ProductBundles") {
                // Alternative solution is perhaps to
                // do whatever Sugar does when the same
                // request is received from the web:
                $pb_cls = $beanList[$module2];
                $pb = new $pb_cls();
                $pb->retrieve($module2_id);
                // Check if this relationship already exists
                $query = "SELECT count(*) AS count FROM product_bundle_quote WHERE quote_id = '{$module1_id}' AND bundle_id = '{$module2_id}' AND deleted = '0'";
                $result = $GLOBALS['db']->query($query, true, "Error checking for previously existing relationship between quote and product_bundle");
                $row = $GLOBALS['db']->fetchByAssoc($result);
                if (isset($row['count']) && $row['count'] > 0) {
                    return $error->get_soap_array();
                }
                $query = "SELECT MAX(bundle_index)+1 AS idx FROM product_bundle_quote WHERE quote_id = '{$module1_id}' AND deleted='0'";
                $result = $GLOBALS['db']->query($query, true, "Error getting bundle_index");
                $GLOBALS['log']->debug("*********** Getting max bundle_index");
                $GLOBALS['log']->debug($query);
                $row = $GLOBALS['db']->fetchByAssoc($result);
                $idx = 0;
                if ($row) {
                    $idx = $row['idx'];
                }
                $pb->set_productbundle_quote_relationship($module1_id, $module2_id, $idx);
                $pb->save();
                return $error->get_soap_array();
            } else {
                if ($module1 == "ProductBundles" && $module2 == "Products") {
                    // And, well, similar things apply in this case
                    $pb_cls = $beanList[$module1];
                    $pb = new $pb_cls();
                    $pb->retrieve($module1_id);
                    // Check if this relationship already exists
                    $query = "SELECT count(*) AS count FROM product_bundle_product WHERE bundle_id = '{$module1_id}' AND product_id = '{$module2_id}' AND deleted = '0'";
                    $result = $GLOBALS['db']->query($query, true, "Error checking for previously existing relationship between quote and product_bundle");
                    $row = $GLOBALS['db']->fetchByAssoc($result);
                    if (isset($row['count']) && $row['count'] > 0) {
                        return $error->get_soap_array();
                    }
                    $query = "SELECT MAX(product_index)+1 AS idx FROM product_bundle_product WHERE bundle_id='{$module1_id}'";
                    $result = $GLOBALS['db']->query($query, true, "Error getting bundle_index");
                    $GLOBALS['log']->debug("*********** Getting max bundle_index");
                    $GLOBALS['log']->debug($query);
                    $row = $GLOBALS['db']->fetchByAssoc($result);
                    $idx = 0;
                    if ($row) {
                        $idx = $row['idx'];
                    }
                    $pb->set_productbundle_product_relationship($module2_id, $idx, $module1_id);
                    $pb->save();
                    $prod_cls = $beanList[$module2];
                    $prod = new $prod_cls();
                    $prod->retrieve($module2_id);
                    $prod->quote_id = $pb->quote_id;
                    $prod->save();
                    return $error->get_soap_array();
                }
            }
            // END SnapLogic fix for bug 32064
            if (!empty($key)) {
                $mod->load_relationship($key);
                $mod->{$key}->add($module2_id);
                return $error->get_soap_array();
            }
            // if
        }
    }
    if (!$key) {
        $error->set_error('no_module');
        return $error->get_soap_array();
    }
    if (($module1 == 'Meetings' || $module1 == 'Calls') && ($module2 == 'Contacts' || $module2 == 'Users')) {
        $key = strtolower($module2);
        $mod->load_relationship($key);
        $mod->{$key}->add($module2_id);
    } else {
        if ($module1 == 'Contacts' && ($module2 == 'Notes' || $module2 == 'Calls' || $module2 == 'Meetings' || $module2 == 'Tasks') && !empty($session)) {
            $mod->{$key} = $module2_id;
            $mod->save_relationship_changes(false);
            if (!empty($mod->account_id)) {
                // when setting a relationship from a Contact to these activities, if the Contacts is related to an Account,
                // we want to associate that Account to the activity as well
                $ret = set_relationship($session, array('module1' => 'Accounts', 'module1_id' => $mod->account_id, 'module2' => $module2, 'module2_id' => $module2_id));
            }
        } else {
            $mod->{$key} = $module2_id;
            $mod->save_relationship_changes(false);
        }
    }
    return $error->get_soap_array();
}
Esempio n. 7
0
/**
 * (Internal) Create a relationship between two beans.
 *
 * @param Array $set_relationship_value --
 *      'module1' -- The name of the module that the primary record is from.  This name should be the name the module was developed under (changing a tab name is studio does not affect the name that should be passed into this method)..
 *      'module1_id' -- The ID of the bean in the specified module
 *      'module2' -- The name of the module that the related record is from.  This name should be the name the module was developed under (changing a tab name is studio does not affect the name that should be passed into this method)..
 *      'module2_id' -- The ID of the bean in the specified module
 * @return Empty error on success, Error on failure
 */
function handle_set_relationship($set_relationship_value)
{
    global $beanList, $beanFiles;
    $error = new SoapError();
    $module1 = $set_relationship_value['module1'];
    $module1_id = $set_relationship_value['module1_id'];
    $module2 = $set_relationship_value['module2'];
    $module2_id = $set_relationship_value['module2_id'];
    if (empty($beanList[$module1]) || empty($beanList[$module2])) {
        $error->set_error('no_module');
        return $error->get_soap_array();
    }
    $class_name = $beanList[$module1];
    require_once $beanFiles[$class_name];
    $mod = new $class_name();
    $mod->retrieve($module1_id);
    if (!$mod->ACLAccess('DetailView')) {
        $error->set_error('no_access');
        return $error->get_soap_array();
    }
    if ($module1 == "Contacts" && $module2 == "Users") {
        $key = 'contacts_users_id';
    } else {
        $key = array_search(strtolower($module2), $mod->relationship_fields);
        if (!$key) {
            $key = Relationship::retrieve_by_modules($module1, $module2, $GLOBALS['db']);
            if (!empty($key)) {
                $mod->load_relationship($key);
                $mod->{$key}->add($module2_id);
                return $error->get_soap_array();
            }
            // if
        }
    }
    if (!$key) {
        $error->set_error('no_module');
        return $error->get_soap_array();
    }
    if (($module1 == 'Meetings' || $module1 == 'Calls') && ($module2 == 'Contacts' || $module2 == 'Users')) {
        $key = strtolower($module2);
        $mod->load_relationship($key);
        $mod->{$key}->add($module2_id);
    } else {
        $mod->{$key} = $module2_id;
        $mod->save_relationship_changes(false);
    }
    return $error->get_soap_array();
}
Esempio n. 8
0
 /**
  * This function is a good location to save changes that have been made to a relationship.
  * This should be overriden in subclasses that have something to save.
  *
  * @param $is_update true if this save is an update.
  */
 function save_relationship_changes($is_update, $exclude = array())
 {
     $new_rel_id = false;
     $new_rel_link = false;
     // check incoming data
     if (isset($this->not_use_rel_in_req) && $this->not_use_rel_in_req) {
         // if we should use relation data from properties (for REQUEST-independent calls)
         $rel_id = isset($this->new_rel_id) ? $this->new_rel_id : '';
         $rel_link = isset($this->new_rel_relname) ? $this->new_rel_relname : '';
     } else {
         // if we should use relation data from REQUEST
         $rel_id = isset($_REQUEST['relate_id']) ? $_REQUEST['relate_id'] : '';
         $rel_link = isset($_REQUEST['relate_to']) ? $_REQUEST['relate_to'] : '';
     }
     // filter relation data
     if ($rel_id && $rel_link && !in_array($rel_link, $exclude) && $rel_id != $this->id) {
         $new_rel_id = $rel_id;
         $new_rel_link = $rel_link;
         // Bug #53223 : wrong relationship from subpanel create button
         // if LHSModule and RHSModule are same module use left link to add new item b/s of:
         // $rel_id and $rel_link are not emty - request is from subpanel
         // $rel_link contains relationship name - checked by call load_relationship
         $this->load_relationship($rel_link);
         if (!empty($this->{$rel_link}) && $this->{$rel_link}->getRelationshipObject() && $this->{$rel_link}->getRelationshipObject()->getLHSModule() == $this->{$rel_link}->getRelationshipObject()->getRHSModule()) {
             $new_rel_link = $this->{$rel_link}->getRelationshipObject()->getLHSLink();
         } else {
             //Try to find the link in this bean based on the relationship
             foreach ($this->field_defs as $key => $def) {
                 if (isset($def['type']) && $def['type'] == 'link' && isset($def['relationship']) && $def['relationship'] == $rel_link) {
                     $new_rel_link = $key;
                 }
             }
         }
     }
     // First we handle the preset fields listed in the fixed relationship_fields array hardcoded into the OOB beans
     // TODO: remove this mechanism and replace with mechanism exclusively based on the vardefs
     if (isset($this->relationship_fields) && is_array($this->relationship_fields)) {
         foreach ($this->relationship_fields as $id => $rel_name) {
             if (in_array($id, $exclude)) {
                 continue;
             }
             if (!empty($this->{$id})) {
                 // Bug #44930 We do not need to update main related field if it is changed from sub-panel.
                 if ($rel_name == $new_rel_link && $this->{$id} != $new_rel_id) {
                     $new_rel_id = '';
                 }
                 $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - adding a relationship record: ' . $rel_name . ' = ' . $this->{$id});
                 //already related the new relationship id so let's set it to false so we don't add it again using the _REQUEST['relate_i'] mechanism in a later block
                 if ($this->{$id} == $new_rel_id) {
                     $new_rel_id = false;
                 }
                 $this->load_relationship($rel_name);
                 $this->{$rel_name}->add($this->{$id});
                 $related = true;
             } else {
                 //if before value is not empty then attempt to delete relationship
                 if (!empty($this->rel_fields_before_value[$id])) {
                     $GLOBALS['log']->debug('save_relationship_changes(): From relationship_field array - attempting to remove the relationship record, using relationship attribute' . $rel_name);
                     $this->load_relationship($rel_name);
                     $this->{$rel_name}->delete($this->id, $this->rel_fields_before_value[$id]);
                 }
             }
         }
     }
     /*      Next, we'll attempt to update all of the remaining relate fields in the vardefs that have 'save' set in their field_def
             Only the 'save' fields should be saved as some vardef entries today are not for display only purposes and break the application if saved
             If the vardef has entries for field <a> of type relate, where a->id_name = <b> and field <b> of type link
             then we receive a value for b from the MVC in the _REQUEST, and it should be set in the bean as $this->$b
     */
     foreach ($this->field_defs as $def) {
         if ($def['type'] == 'relate' && isset($def['id_name']) && isset($def['link']) && isset($def['save'])) {
             if (in_array($def['id_name'], $exclude) || in_array($def['id_name'], $this->relationship_fields)) {
                 continue;
             }
             // continue to honor the exclude array and exclude any relationships that will be handled by the relationship_fields mechanism
             $linkField = $def['link'];
             if (isset($this->field_defs[$linkField])) {
                 $linkfield = $this->field_defs[$linkField];
                 if ($this->load_relationship($linkField)) {
                     $idName = $def['id_name'];
                     if (!empty($this->rel_fields_before_value[$idName]) && empty($this->{$idName})) {
                         //if before value is not empty then attempt to delete relationship
                         $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to remove the relationship record: {$def['link']} = {$this->rel_fields_before_value[$def['id_name']]}");
                         $this->{$def}['link']->delete($this->id, $this->rel_fields_before_value[$def['id_name']]);
                     }
                     if (!empty($this->{$idName}) && is_string($this->{$idName})) {
                         $GLOBALS['log']->debug("save_relationship_changes(): From field_defs - attempting to add a relationship record - {$def['link']} = {$this->{$def}['id_name']}");
                         $this->{$linkField}->add($this->{$idName});
                     }
                 } else {
                     $GLOBALS['log']->fatal("Failed to load relationship {$linkField} while saving {$this->module_dir}");
                 }
             }
         }
     }
     // Finally, we update a field listed in the _REQUEST['*/relate_id']/_REQUEST['relate_to'] mechanism (if it hasn't already been updated above)
     if (!empty($new_rel_id)) {
         if ($this->load_relationship($new_rel_link)) {
             $this->{$new_rel_link}->add($new_rel_id);
         } else {
             $lower_link = strtolower($new_rel_link);
             if ($this->load_relationship($lower_link)) {
                 $this->{$lower_link}->add($new_rel_id);
             } else {
                 require_once 'data/Link2.php';
                 $rel = Relationship::retrieve_by_modules($new_rel_link, $this->module_dir, $GLOBALS['db'], 'many-to-many');
                 if (!empty($rel)) {
                     foreach ($this->field_defs as $field => $def) {
                         if ($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $rel) {
                             $this->load_relationship($field);
                             $this->{$field}->add($new_rel_id);
                             return;
                         }
                     }
                     //ok so we didn't find it in the field defs let's save it anyway if we have the relationshp
                     $this->{$rel} = new Link2($rel, $this, array());
                     $this->{$rel}->add($new_rel_id);
                 }
             }
         }
     }
 }
Esempio n. 9
0
 function run_action(SugarBean $bean, $params = array(), $in_save = false)
 {
     global $beanList;
     if (isset($params['record_type']) && $params['record_type'] != '') {
         if ($beanList[$params['record_type']]) {
             $record = new $beanList[$params['record_type']]();
             $this->set_record($record, $bean, $params);
             $this->set_relationships($record, $bean, $params);
             if (isset($params['relate_to_workflow']) && $params['relate_to_workflow']) {
                 require_once 'modules/Relationships/Relationship.php';
                 $key = Relationship::retrieve_by_modules($bean->module_dir, $record->module_dir, $GLOBALS['db']);
                 if (!empty($key)) {
                     foreach ($bean->field_defs as $field => $def) {
                         if ($def['type'] == 'link' && !empty($def['relationship']) && $def['relationship'] == $key) {
                             $bean->load_relationship($field);
                             $bean->{$field}->add($record->id);
                             break;
                         }
                     }
                 }
             }
             return true;
         }
     }
     return false;
 }
Esempio n. 10
0
 function get_rel_module($var_rel_name, $get_rel_name = false)
 {
     //get the vardef fields relationship name
     //get the base_module bean
     $module_bean = BeanFactory::getBean($this->base_module);
     require_once 'data/Link.php';
     $rel_name = Relationship::retrieve_by_modules($var_rel_name, $this->base_module, $GLOBALS['db']);
     if (!empty($module_bean->field_defs[$rel_name])) {
         $var_rel_name = $rel_name;
     }
     $var_rel_name = strtolower($var_rel_name);
     if ($get_rel_name) {
         //bug #46246: should set relationship name instead of related field name
         $this->rel_name = isset($rel_name) ? $rel_name : $var_rel_name;
     }
     $rel_attribute_name = $module_bean->field_defs[$var_rel_name]['relationship'];
     //use the vardef to retrive the relationship attribute
     unset($module_bean);
     return get_rel_module_name($this->base_module, $rel_attribute_name, $this->db);
 }
$rawRow['total_amt'] = format_number($rawRow['total_amt']);
$rawRow['discount_amount'] = format_number($rawRow['discount_amount']);
$rawRow['subtotal_amount'] = format_number($rawRow['subtotal_amount']);
$rawRow['tax_amount'] = format_number($rawRow['tax_amount']);
$rawRow['date_entered'] = '';
$rawRow['date_modified'] = '';
if ($rawRow['shipping_amount'] != null) {
    $rawRow['shipping_amount'] = format_number($rawRow['shipping_amount']);
}
$rawRow['total_amount'] = format_number($rawRow['total_amount']);
$invoice->populateFromRow($rawRow);
$invoice->process_save_dates = false;
$invoice->save();
//Setting invoice quote relationship
require_once 'modules/Relationships/Relationship.php';
$key = Relationship::retrieve_by_modules('AOS_Quotes', 'AOS_Invoices', $GLOBALS['db']);
if (!empty($key)) {
    $quote->load_relationship($key);
    $quote->{$key}->add($invoice->id);
}
//Setting Line Items
$sql = "SELECT * FROM aos_products_quotes WHERE parent_type = 'AOS_Quotes' AND parent_id = '" . $quote->id . "' AND deleted = 0";
$result = $this->bean->db->query($sql);
while ($row = $this->bean->db->fetchByAssoc($result)) {
    $row['id'] = '';
    $row['parent_id'] = $invoice->id;
    $row['parent_type'] = 'AOS_Invoices';
    if ($row['product_cost_price'] != null) {
        $row['product_cost_price'] = format_number($row['product_cost_price']);
    }
    $row['product_list_price'] = format_number($row['product_list_price']);