Ситуация такова, что когда менеджеры ведут по нескольку сделок сразу, то следить за поступление денежных средств очень не удобно. Особенно, если факт оплаты счетов заносит кто-то другой. Просматривать все счета на предмет изменения статуса муторно и долго.
В нашей компании менеджер контролирует все, что относится к его сделкам: пришли или не пришли деньги от клиента, поставили оборудование в заказ или нет, оплатили или нет поставщику, выставили или нет бумаги, отвезли груз или не отвезли и т.д.
Поэтому было принято решение о рассылке уведомлений при поступлении оплаты по счету. Собственно, механизм следующий: если у счета меняется статус оплаты на "Оплачен" или "Оплачен частично", то отсылается уведомление. Уведомление отсылается либо ответственному по сделку, если счет прицеплен к сделке, либо ответственному по счету. Отсылка сделана по образу и подобию уведомлений, которые отсылаются при создании Задачи.
В скрипт wnd_InvoiceEditScript в функцию wnd_InvoiceEditOnPrepare в самый конец добавил строчку одну строку. Теперь эта функция выглядит вот так:
function wnd_InvoiceEditOnPrepare(Window) {
Initialize(Window);
wnd_BaseDBEditOnPrepare(Window);
/* MODULE WORKFLOW */
var RequestFromWorkflow = false;
/* ENDMODULE WORKFLOW */
InvoiceEdit.IsCompleting = false;
/* MODULE WORKFLOW */
var DefaultValues = GetAttribute(Window, 'DefaultValues');
var Dataset = BaseDBEdit.Dataset;
if (Assigned(DefaultValues)) {
// Post WorkflowItemID anyway because for this Invoice new
// workflow item was created
var NewWorkflowItemID = DefaultValues('WorkflowItemID');
var RequestFromWorkflow = (!IsEmptyValue(NewWorkflowItemID));
if ((RequestFromWorkflow) &&
(Dataset.Values('WorkflowItemID') != NewWorkflowItemID)) {
Dataset.Values('WorkflowItemID') = NewWorkflowItemID;
if (Dataset.State == dstEdit) {
Dataset.Post();
Dataset.Edit();
}
}
}
if (RequestFromWorkflow && (Dataset.State == dstInsert)) {
InvoiceEdit.CanCancel = false;
dlData.Dataset.Values('BillStatusID') = null;
} else {
InvoiceEdit.CanCancel = true;
}
btnCancel.IsEnabled = InvoiceEdit.CanCancel;
/* ENDMODULE WORKFLOW */
EnableNumberEdit();
InvoiceEdit.BillStatusID = Dataset('BillStatusID');
}
Также были внесены изменения в функцию
btnOKOnClick:
function btnOKOnClick(Control) {
var Dataset = dlData.Dataset;
var DefaultValues = GetAttribute(Self, 'DefaultValues');
/* MODULE WORKFLOW */
var WorkflowItemID = Dataset.ValAsStr('WorkflowItemID');
/* ENDMODULE WORKFLOW */
InvoiceEdit.IsCompleting = true;
if (CheckItemNumberDuplicate('Invoice', Dataset, 'InvoiceNumber')){
scr_BaseDBEdit.btnOKOnClick(Control);
}
Dataset.Open();
var BillStatusID = Dataset('BillStatusID');
if (!(InvoiceEdit.BillStatusID == BillStatusID)){
if ((BillStatusID == GetInvoicePaidStatus())||
(BillStatusID == GetInvoicePartialPaidStatus())) {
var OpportunityID = Dataset('OpportunityID');
if (!IsEmptyGUID(OpportunityID)){
var ContactID = GetDatasetFieldValueByID('ds_Opportunity',OpportunityID,'OwnerID');
}else{
var ContactID = Dataset('OwnerID');
}
ProcessSendInvoiceEmailByContactID(Dataset, ContactID);
}
}
/* MODULE WORKFLOW */
if (Self.IsVisible) {
return;
}
ProcessWorkflowItem(WorkflowItemID);
/* ENDMODULE WORKFLOW */
}
Затем в скрипт
scr_InvoiceUtils после строки
var InvoiceUtils = new Object();
была добавлена вот эта строка:
InvoiceUtils.PartialPaidStatusCode = 'PartialPaid';
А также был добавлен ряд функций:
function GetInvoicePartialPaidStatus() {
if (IsEmptyGUID(InvoiceUtils.PaidStatusID)) {
GetInvoiceStatusIDs();
}
return InvoiceUtils.PartialPaidStatusID;
}
function GetInvoiceNotifyMessageHTMLBody(Dataset) {
var DataFields = Dataset.DataFields;
var HTMLBody = '
\n';
HTMLBody = HTMLBody + 'Вы получили данное уведомление об оплате счета, так как являетесь ответственным лицом.\n
';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('InvoiceNumber')) + ' от ' + Dataset.ValAsStr('InvoiceDate') + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('OpportunityID')) + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + '' + DataFields.ItemsByName('BasicAmount').Caption + ': ' + Dataset.ValAsStr('BasicAmount') + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('CustomerID')) + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('SupplierID')) + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('BillStatusID')) + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + '' + DataFields.ItemsByName('PaymentAmount').Caption + ': ' + Dataset.ValAsStr('PaymentAmount') + '\n';
HTMLBody = HTMLBody + ' ';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('PaymentDate')) + '\n';
HTMLBody = HTMLBody + '
\n';
HTMLBody = HTMLBody + '\n';
HTMLBody = HTMLBody + GetDatasetFieldHTMLView(DataFields.ItemsByName('ID')) + '\n';
HTMLBody = HTMLBody + '