Пример #1
0
 function saveOppPanelAction()
 {
     @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', ''));
     @($opp_id = DevblocksPlatform::importGPC($_REQUEST['opp_id'], 'integer', 0));
     @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', ''));
     @($status = DevblocksPlatform::importGPC($_REQUEST['status'], 'integer', 0));
     @($amount_dollars = DevblocksPlatform::importGPC($_REQUEST['amount'], 'string', '0'));
     @($amount_cents = DevblocksPlatform::importGPC($_REQUEST['amount_cents'], 'integer', 0));
     @($email_str = DevblocksPlatform::importGPC($_REQUEST['emails'], 'string', ''));
     @($worker_id = DevblocksPlatform::importGPC($_REQUEST['worker_id'], 'integer', 0));
     @($comment = DevblocksPlatform::importGPC($_REQUEST['comment'], 'string', ''));
     @($created_date_str = DevblocksPlatform::importGPC($_REQUEST['created_date'], 'string', ''));
     @($closed_date_str = DevblocksPlatform::importGPC($_REQUEST['closed_date'], 'string', ''));
     @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0));
     // State
     $is_closed = 0 == $status ? 0 : 1;
     $is_won = 1 == $status ? 1 : 0;
     // Strip commas and decimals and put together the "dollars+cents"
     $amount = intval(str_replace(array(',', '.'), '', $amount_dollars)) . '.' . number_format($amount_cents, 0, '', '');
     // Dates
     if (false === ($created_date = strtotime($created_date_str))) {
         $created_date = time();
     }
     if (false === ($closed_date = strtotime($closed_date_str))) {
         $closed_date = $is_closed ? time() : 0;
     }
     if (!$is_closed) {
         $closed_date = 0;
     }
     // Worker
     $active_worker = CerberusApplication::getActiveWorker();
     // Save
     if ($do_delete) {
         if (null != ($opp = DAO_CrmOpportunity::get($opp_id))) {
             // Check privs
             if ($active_worker->hasPriv('crm.opp.actions.create') && $active_worker->id == $opp->worker_id || $active_worker->hasPriv('crm.opp.actions.update_nobody') && empty($opp->worker_id) || $active_worker->hasPriv('crm.opp.actions.update_all')) {
                 DAO_CrmOpportunity::delete($opp_id);
             }
         }
     } elseif (empty($opp_id)) {
         $emails = DevblocksPlatform::parseCsvString($email_str);
         // Check privs
         if (!$active_worker->hasPriv('crm.opp.actions.create')) {
             return;
         }
         // One opportunity per provided e-mail address
         if (is_array($emails)) {
             foreach ($emails as $email) {
                 if (null == ($address = DAO_Address::lookupAddress($email, true))) {
                     continue;
                 }
                 $fields = array(DAO_CrmOpportunity::NAME => $name, DAO_CrmOpportunity::AMOUNT => $amount, DAO_CrmOpportunity::PRIMARY_EMAIL_ID => $address->id, DAO_CrmOpportunity::CREATED_DATE => intval($created_date), DAO_CrmOpportunity::UPDATED_DATE => time(), DAO_CrmOpportunity::CLOSED_DATE => intval($closed_date), DAO_CrmOpportunity::IS_CLOSED => $is_closed, DAO_CrmOpportunity::IS_WON => $is_won, DAO_CrmOpportunity::WORKER_ID => $worker_id);
                 $opp_id = DAO_CrmOpportunity::create($fields);
                 // Custom fields
                 @($field_ids = DevblocksPlatform::importGPC($_REQUEST['field_ids'], 'array', array()));
                 DAO_CustomFieldValue::handleFormPost(CrmCustomFieldSource_Opportunity::ID, $opp_id, $field_ids);
                 // If we're adding a first comment
                 if (!empty($comment)) {
                     $fields = array(DAO_Note::CREATED => time(), DAO_Note::SOURCE_EXTENSION_ID => CrmNotesSource_Opportunity::ID, DAO_Note::SOURCE_ID => $opp_id, DAO_Note::CONTENT => $comment, DAO_Note::WORKER_ID => $active_worker->id);
                     $comment_id = DAO_Note::create($fields);
                 }
             }
         }
     } else {
         if (empty($opp_id)) {
             return;
         }
         $fields = array(DAO_CrmOpportunity::NAME => $name, DAO_CrmOpportunity::AMOUNT => $amount, DAO_CrmOpportunity::CREATED_DATE => intval($created_date), DAO_CrmOpportunity::UPDATED_DATE => time(), DAO_CrmOpportunity::CLOSED_DATE => intval($closed_date), DAO_CrmOpportunity::IS_CLOSED => $is_closed, DAO_CrmOpportunity::IS_WON => $is_won, DAO_CrmOpportunity::WORKER_ID => $worker_id);
         // Check privs
         if (null != ($opp = DAO_CrmOpportunity::get($opp_id)) && ($active_worker->hasPriv('crm.opp.actions.create') && $active_worker->id == $opp->worker_id || $active_worker->hasPriv('crm.opp.actions.update_nobody') && empty($opp->worker_id) || $active_worker->hasPriv('crm.opp.actions.update_all'))) {
             DAO_CrmOpportunity::update($opp_id, $fields);
             // Custom fields
             @($field_ids = DevblocksPlatform::importGPC($_REQUEST['field_ids'], 'array', array()));
             DAO_CustomFieldValue::handleFormPost(CrmCustomFieldSource_Opportunity::ID, $opp_id, $field_ids);
         }
     }
     // Reload view (if linked)
     if (!empty($view_id) && null != ($view = C4_AbstractViewLoader::getView('', $view_id))) {
         $view->render();
     }
     exit;
 }