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; }