-1

In Vtiger 6.5.0 open source, I wants to create a alert function to warn users that the conact's mobile is existing? could you please help me. I'm fresher.

Thanks, Loi

Victor
  • 1
  • 3

3 Answers3

1

You can refer the function wich exist in Account module for checking Duplicate Account Name.

Please follow this files you will get an idea.

This is the code flow how its done In Account Module

Registring Pre Save Event http://code.vtiger.com/vtiger/vtigercrm/blob/master/layouts/vlayout/modules/Accounts/resources/Edit.js#L250

This teh Fucntion to check Duplicate in cache, If not calls the Helper function http://code.vtiger.com/vtiger/vtigercrm/blob/master/layouts/vlayout/modules/Accounts/resources/Edit.js#L83

This the Helper function which makes the call to server http://code.vtiger.com/vtiger/vtigercrm/blob/master/resources/helper.js#L166

This is the action function which is responsible for Serving the request which came from Helper Function http://code.vtiger.com/vtiger/vtigercrm/blob/master/modules/Accounts/actions/CheckDuplicate.php#L30

And this is the function which checks for Duplicate http://code.vtiger.com/vtiger/vtigercrm/blob/master/modules/Accounts/models/Record.php#L57

Hope this helps.

Salim
  • 196
  • 8
1

Hi Victor please follow this steps

modules\Leads\actions\Checkprimaryemail.php

<?php

    class Leads_Checkprimaryemail_Action extends Vtiger_BasicAjax_Action {

        public function checkPermission(Vtiger_Request $request) {
            return;
        }

        public function process(Vtiger_Request $request) {
            global $adb;
            $moduleName = $request->get('module');
            $recordId = $request->get('recordId');
            $primary_email = $request->get('primary_email');

            /*Lead Details*/
            $lead_query = "select * from vtiger_leaddetails
                     inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_leaddetails.leadid 
                     where vtiger_crmentity.deleted = 0 and vtiger_leaddetails.email='".$primary_email."'";
            $lead_result = $adb->query($lead_query);
            $lead_email = $adb->query_result($lead_result,0,'email');
            $lead_numrows = $adb->num_rows($lead_result);

            /*Contact Details*/
            $cont_query = "select * from vtiger_contactdetails
                     inner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_contactdetails.contactid 
                     where vtiger_crmentity.deleted = 0 and vtiger_contactdetails.email='".$primary_email."'";
            $cont_result = $adb->query($cont_query);
            $cont_email = $adb->query_result($cont_result,0,'email');
            $cont_numrows = $adb->num_rows($cont_result);

            if($recordId != '' ){
                if($primary_email == $lead_email && $lead_numrows == 1 ){
                    $emailtrue = 0;
                } elseif($primary_email == $cont_email && $cont_numrows >= 1 ) {
                    $emailtrue = 1;
                }
            } else {
                if(($lead_numrows >=1 || $cont_numrows >=1 ) ||  ($lead_numrows >=1 && $cont_numrows >= 1)  ){
                    $emailtrue = 1;
                } else {
                    $emailtrue = 0;
                }
            }

            $emailData = array($emailtrue);
            $response = new Vtiger_Response();
            $response->setResult($emailData);
            $response->emit();

        }
    }

    ?>

After Create One other file layouts\vlayout\modules\Leads\resources\Edit.js

Vtiger_Edit_Js("Leads_Edit_Js", {
}, {
    changeEvent: function (container) {
        jQuery('input[name="email"]').on('focusout', function (e) {
            var email = jQuery('input[name="email"]').val();
            var recordId = jQuery('input[name="record"]').val();
            var email_length = email.length;
            if (email != '') {
                if (email_length > 100) {
                    var errorMessage = app.vtranslate('JS_EMAIL_LENGTH_VALIDATION');
                    params = {
                        text: errorMessage,
                        'type': 'error',
                    };
                    Vtiger_Helper_Js.showMessage(params);
                }

                var progressIndicatorElement = jQuery.progressIndicator({
                    'position': 'html',
                    'blockInfo': {
                        'enabled': true
                    }
                });
                var postData = {
                    "module": 'Leads',
                    "action": "Checkprimaryemail",
                    "primary_email": email,
                    "recordId": recordId
                }
                AppConnector.request(postData).then(
                        function (data) {
                            progressIndicatorElement.progressIndicator({'mode': 'hide'});
                            if (data['result'] == 1) {
                                jQuery('#emailalready_exists').val(1);
                                var errorMessage = app.vtranslate('JS_EMAIL_EXIST');
                                params = {
                                    text: errorMessage,
                                    'type': 'error',
                                };
                                Vtiger_Helper_Js.showMessage(params);
                            } else {
                                jQuery('#emailalready_exists').val(0);
                            }
                        },
                        function (error, err) {}
                );
                e.preventDefault();
            }
        });
    },
    registerBasicEvents: function (container) {
        this._super(container);
        this.changeEvent(container);
    }
});
Divyesh
  • 329
  • 3
  • 17
  • Hi Chothani, I applied this in Leads and it worked perfect. However, i apply the same logic in contacts, it didn't work. – Victor May 30 '17 at 08:35
  • if you are use this contact module then Create File in Contact module with Replace word Leads to Contacts – Divyesh Jun 03 '17 at 06:02
0

To check duplicate records in vTiger follow below steps: Register checkDuplicate function in registerBasicEvents 1: \layouts\vlayout\modules\Contacts\resources\Edit.js

getmobile : function(container){
    return jQuery('input[name="mobile"]',container).val();
},
getRecordId : function(container){
    return jQuery('input[name="record"]',container).val();
},
DuplicateCheck : function(form) {
    var thisInstance = this;
    if(typeof form == 'undefined') {
        form = this.getForm();
    }
     jQuery( "#mobileFieldId" ).change(function() {
            var mobile = thisInstance.getmobile(form);

        var recordId = thisInstance.getRecordId(form);
        var params = {
            'module' : "Contacts",
            'action' : "CheckDuplicate",
            'mobile' : mobile,
            'record' : recordId
        }
        AppConnector.request(params).then(
            function(data) {
                var response = data['result'];
                var result = response['success'];
                if(result == true) {
                    var message_params = {
                        title : app.vtranslate('JS_MESSAGE'),
                        text: response['message'],
                        animation: 'show',
                        type: 'error'
                    };
                    Vtiger_Helper_Js.showPnotify(message_params);
                    jQuery(".btn-success").attr('disabled',true);
                    return false;
                } else {
                    jQuery(".btn-success").attr('disabled',false);
                }
            }
        );
     });
   },

2: Create new file in** \modules\Contacts\actions\CheckDuplicate.php Follow the same process / code as given in \modules\Accounts\actions\CheckDuplicate.php

3: Add new function checkDuplicate() in \modules\Contacts\models\Record.php

And follow same process as given in \modules\Accounts\models\Record.php having function checkDuplicate()

Note: Don't forget to change the db table name, class name module wise.

Hope this will help you. Thank you.

Sachin I
  • 1,500
  • 3
  • 10
  • 29
  • public function checkDuplicate() { $db = PearDatabase::getInstance(); $query = "SELECT 1 FROM vtiger_crmentity c inner join vtiger_contactdetails lad on c.crmid=lad.contactid WHERE setype = ? AND lad.mobile = ? AND deleted = 0"; $params = array($this->getModule()->getName(), decode_html($this->getName())); $record = $this->getId(); if ($record) { $query .= " AND crmid != ?"; array_push($params, $record); } $result = $db->pquery($query, $params); if ($db->num_rows($result)) { return true; } – Victor Dec 15 '16 at 04:26
  • There should be problem in your query. Please crosscheck again. Try to debug. Because I followed same way and it works like charm. – Sachin I Dec 15 '16 at 19:18
  • Hi sAcH, could you send your files on this functions via email lethangloi0707@gmail.com. – Victor Dec 20 '16 at 06:27