Fixed person contact deletion.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 14 Oct 2013 11:53:06 +0000 (13:53 +0200)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 14 Oct 2013 11:53:06 +0000 (13:53 +0200)
includes/db/crm_contacts_db.inc
includes/ui/contacts_view.inc

index 94a5a991594034f10bba5c8a1d81732171628f29..8623c8e0043525755a07ff8a2248ef76dbc7556e 100644 (file)
@@ -41,7 +41,7 @@ function add_crm_person($ref, $name, $name2, $address, $phone, $phone2, $fax, $e
 }
 
 function update_crm_person($id, $ref, $name, $name2, $address, $phone, $phone2, $fax, $email, 
-       $lang, $notes, $cat_ids, $entity=null)
+       $lang, $notes, $cat_ids, $entity=null, $type=null)
 {
        $sql = "UPDATE ".TB_PREF."crm_persons SET "
                  ."ref=".db_escape($ref) . ", "
@@ -60,7 +60,7 @@ function update_crm_person($id, $ref, $name, $name2, $address, $phone, $phone2,
 
        $ret = db_query($sql, "Can't update crm person");
        if ($ret) {
-               if(!update_person_contacts($id, $cat_ids, $entity))
+               if(!update_person_contacts($id, $cat_ids, $entity, $type))
                        return null;
        }
        commit_transaction();
@@ -147,9 +147,11 @@ function get_person_contacts($id)
        return $contacts;
 }
 
-function update_person_contacts($id, $cat_ids, $entity_id=null
+function update_person_contacts($id, $cat_ids, $entity_id=null, $type=null)
 {
        $sql = "DELETE FROM ".TB_PREF."crm_contacts WHERE person_id=".db_escape($id);
+       if ($type)
+               $sql .= " AND type=".db_escape($type);
 
        begin_transaction();
 
@@ -163,6 +165,8 @@ function update_person_contacts($id, $cat_ids, $entity_id=null)
                $sql = "INSERT INTO ".TB_PREF."crm_contacts (person_id,type,action,entity_id)
                        SELECT ".db_escape($id).",t.type, t.action,".db_escape($entity_id, true)."
                        FROM ".TB_PREF."crm_categories t WHERE t.id=".implode(' OR t.id=', $cat_ids);
+               if ($type)
+                       $sql .= " AND t.type=".db_escape($type);
                $ret = db_query($sql, "Can't update person contacts");
        }
        commit_transaction();
@@ -171,10 +175,14 @@ function update_person_contacts($id, $cat_ids, $entity_id=null)
 
 function delete_entity_contacts($class, $entity)
 {
+       delete_crm_contacts(null, $class, $entity);
+       // cleanup
        $res = get_crm_persons($class, null, $entity, null, true);
-
        while($person = db_fetch($res)) {
-               delete_crm_person($person['id'], true);
+               $rels = get_person_contacts($person['id']);
+               if (count($rels) == 0) {
+                       delete_crm_person($person['id']);
+               }
        }
 }
 
@@ -261,17 +269,20 @@ function delete_crm_contact($id)
 /*
        Delete selected contacts for given person
 */
-function delete_crm_contacts($person_id, $type = null, $entity_id=null, $action = null)
+function delete_crm_contacts($person_id = null, $type = null, $entity_id=null, $action = null)
 {
-       $sql = "DELETE FROM ".TB_PREF."crm_contacts WHERE person_id=".db_escape($person_id);
+       $sql = "DELETE FROM ".TB_PREF."crm_contacts WHERE ";
+
+       if ($person_id)
+               $where[] = 'person_id='.db_escape($person_id);
        if ($type)
-               $sql .= ' AND type='.db_escape($type);
+               $where[] = 'type='.db_escape($type);
        if ($entity_id)
-               $sql .= ' AND entity_id='.db_escape($entity_id);
+               $where[] = 'entity_id='.db_escape($entity_id);
        if ($action)
-               $sql .= ' AND action='.db_escape($action);
+               $where[] = 'action='.db_escape($action);
 
-       return db_query($sql, "Can't delete crm contact");
+       return db_query($sql.implode(' AND ', $where), "Can't delete crm contact");
 }
 
 /*
index 07e3066deff1224036ee083cf95d2501ebcb09bb..3cdc3c1ad50cbcf814628b1ed7a86619e8d1b05f 100644 (file)
@@ -123,8 +123,7 @@ class contacts extends simple_crud {
        function db_update() {
                        return update_crm_person($this->selected_id, $_POST['ref'], $_POST['name'], $_POST['name2'], 
                                $_POST['address'], $_POST['phone'], $_POST['phone2'], $_POST['fax'], $_POST['email'], 
-                               $_POST['lang'], $_POST['notes'], $_POST['assgn'], $this->entity);
-               
+                               $_POST['lang'], $_POST['notes'], $_POST['assgn'], $this->entity, $this->class);
        }
 
        function insert_check() {