Announcement

Collapse
No announcement yet.

Task Reminder for Creator of task

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • rmorgan
    replied
    Here is what I ended up doing - not sure if its the correct way to do it but it works! Others may find it useful.


    edit the file c:\birnami\espocrm-5.5.1-0\apps\espocrm\htdocs\application\espo\modules\crm \business\reminder\emailreminder.php
    add the following line of code below




    and also add a new function following the send function -


    protected function sendtocreator(Entity $reminder)
    {

    $user = $this->getEntityManager()->getEntity('User', $reminder->get('userId'));
    $entity = $this->getEntityManager()->getEntity($reminder->get('entityType'), $reminder->get('entityId'));


    $entityid=$entity->get('id');
    $mytask = $this->getEntityManager()->getEntity('Task', $entityid);
    $creator=$mytask->get('createdBy');
    $creator_emailAddress = $creator->get('emailAddress');


    $emailAddress = $user->get('emailAddress');

    if($emailAddress==$creator_emailAddress)
    {
    //file_put_contents('espocrm_entity.txt','matching email addresses');
    return;
    }
    else{
    $user=$mytask->get('createdBy');
    $emailAddress = $creator->get('emailAddress');
    }

    //--------------
    if (empty($user) || empty($emailAddress) || empty($entity)) {
    return;
    }


    $email = $this->getEntityManager()->getEntity('Email');
    $email->set('to', $emailAddress);


    $subjectTpl = $this->getTemplateFileManager()->getTemplate('reminder', 'subject', $entity->getEntityType(), 'Crm');
    $bodyTpl = $this->getTemplateFileManager()->getTemplate('reminder', 'body', $entity->getEntityType(), 'Crm');


    $subjectTpl = str_replace(array("\n", "\r"), '', $subjectTpl);


    $data = array();


    $siteUrl = rtrim($this->getConfig()->get('siteUrl'), '/');
    $recordUrl = $siteUrl . '/#' . $entity->getEntityType() . '/view/' . $entity->id;
    $data['recordUrl'] = $recordUrl;


    $data['entityType'] = $this->getLanguage()->translate($entity->getEntityType(), 'scopeNames');
    $data['entityTypeLowerFirst'] = lcfirst($data['entityType']);


    if ($user) {
    $data['userName'] = $user->get('name');
    }


    $preferences = $this->getEntityManager()->getEntity('Preferences', $user->id);
    $timezone = $preferences->get('timeZone');
    $dateTime = clone($this->dateTime);
    if ($timezone) {
    $dateTime->setTimezone($timezone);
    }


    $htmlizer = new \Espo\Core\Htmlizer\Htmlizer($this->fileManager, $dateTime, $this->number, null);


    $subject = $htmlizer->render($entity, $subjectTpl, 'reminder-email-subject-' . $entity->getEntityType(), $data, true);
    $body = $htmlizer->render($entity, $bodyTpl, 'reminder-email-body-' . $entity->getEntityType(), $data, false);


    $email->set('subject', $subject);
    $email->set('body', $body);
    $email->set('isHtml', true);


    $emailSender = $this->mailSender;


    $emailSender->send($email);
    }


    Leave a comment:


  • rmorgan
    replied
    What does the subscription table do?

    Leave a comment:


  • rmorgan
    replied
    Well I have been playing - bearing in mind that I don't fundamentally understand the architecture of the code, my original assumption was that every N minutes (set by Admin->Send Email Reminders) some code would be processed and a reminder emailed to those 'users' that have a reminder set. Therefore I just need to intercept the code that runs every N minutes, mod it and job done....obviously not

    What I have done - is create a new file with the following -

    <?php



    namespace Espo\Custom\Hooks\Note;
    use Espo\ORM\Entity;
    class Notifications extends \Espo\Hooks\Note\Notifications
    {

    protected function getSubscriberList($parentType, $parentId, $isInternal = false)
    {

    if (!$this->getMetadata()->get(['scopes', $parentType, 'stream'])) return [];

    $pdo = $this->getEntityManager()->getPDO();


    /*NEED TO MODIFY THIS TO find followers*/
    if (!$isInternal) {
    $sql = "
    SELECT created_by_id as userId
    FROM task
    WHERE id = " . $pdo->quote($parentId);

    } else {
    $sql = "
    SELECT subscription.user_id AS userId
    FROM subscription
    JOIN user ON user.id = subscription.user_id
    WHERE
    entity_id = " . $pdo->quote($parentId) . " AND entity_type = " . $pdo->quote($parentType) . " AND
    user.type <> 'portal'
    ";
    }

    $userList = $this->getEntityManager()->getRepository('User')->where([
    'isActive' => true
    ])->select(['id', 'type'])->find([
    'customWhere' => "AND user.id IN (".$sql.")"
    ]);


    file_put_contents('espocrm_mylog2.txt','.........' );
    file_put_contents('espocrm_mylog2.txt',$sql,FILE_A PPEND);
    file_put_contents('espocrm_mylog2.txt','*-------',FILE_APPEND);
    file_put_contents('espocrm_mylog2.txt',$userList,F ILE_APPEND);
    file_put_contents('espocrm_mylog2.txt','*+++++++', FILE_APPEND);



    return $userList;
    }
    }

    I was hoping to log to a file the users but the users always appear empty. This file only seems to get executed when I create \ update a task with a notification, not at the stage when the code is run (i.e .timer based). So therefore I seem to be missing a fundamental point of something but not sure what....?

    Leave a comment:


  • rmorgan
    commented on 's reply
    So I have created a new file with the function but its likely to take me days trying to understand the code structure in order to get the correct $userList variables. I guess what I am actually after is for Subscribers to get notified. Any more hints??

  • dimyy
    replied
    You can customize function getSubscriberList from \Espo\Hooks\Note\Notifications and include all persons who should be notified in $userList


    Code:
    namespace Espo\Custom\Hooks\Note;
    use Espo\ORM\Entity;
    class Notifications extends \Espo\Hooks\Note\Notifications
    {
    
        protected function getSubscriberList($parentType, $parentId, $isInternal = false)
        {       
             return $userList;
        }
    }

    Leave a comment:


  • rmorgan
    started a topic Task Reminder for Creator of task

    Task Reminder for Creator of task

    It looks like the default reminder (popup or email) only gets sent to the Assigned User. Is there a way that the Creator could also get the reminder?

    The reason - sales team have a number of tasks that they send to engineering along with a required due date. The creator (sales guy) also wants a reminder that the task needs completion on a certain day/time else they may forget as well.

Working...
X