ResourcesTab. Интерфейс работы с ресурсами текущего этапа Назад В начало Вперед

Файл: Example\Src\VIP\PrjMng\ResourcesTab.vip

Издание 01.2007. Добавлены директивы документирования.

Издание 03.2005. В интерфейсе работы с ресурсами текущего этапа ResourcesTab в операторах new создания экземпляра интерфейса добавлено указание на компонентную принадлежность создаваемых интерфейсов. См. обработчик события cmOnVipLoad.

//******************************************************************************
//													(c) корпорация Галактика
// Демопроект 1.0 - Управление проектами
// Интерфейс работы с ресурсами текущего этапа
//******************************************************************************

#include IPrjResources.vih
#include IResources.vih

//******************************************************************************
#doc
 Интерфейс работы с ресурсами текущего этапа.</brief>
 Данный интерфейс объединяет в одну панель экранные редакторы для работы с разными ресурсами
 и представляет их интерфейсу-контейнеру (<link interface C_PRJMNG::ProjectsMain>ProjectsMain</link>)
 в виде обобщенного ресурса с универсальными характеристиками (стоимость).
#end

interface ResourcesTab 'Ресурсы';

create view
var
  iResMaterials : C_CORE::MaterialsEdit noAuto;
  iResPersons   : C_CORE::ExecutorsEdit noAuto;
;

//------------------------------------------------------------------------------

#doc
  <p>В контейнере сменился текущий хозяин ресурсов.</brief>
  <p>Параметры:
  <ul>
	<li>cNewParent - NRec нового хозяина
  </ul>
#end

procedure MasterChanged(cNewMaster : comp);
{
  iResMaterials.MasterChanged(cNewMaster);
  iResPersons.MasterChanged(cNewMaster);
}

//------------------------------------------------------------------------------

#doc
  <p>Обработка события "изменилась плановая стоимость
  ресурсов по текущему этапу проекта".</brief>
  Просто передаем событие вышестоящему контейнеру.
  <p>Параиетры:
  <ul>
	<li>d - величина изменения
  </ul>
#end

procedure ResourceSumChanged (d : double);
{
  SumChanged(d);
}

//------------------------------------------------------------------------------

#doc
  <p>Функция проверяет наличие ресурсов у заданного владельца.</brief>
  <p>Параметры:
  <ul>
	<li>cMaster - NRec владельца ресурсов
  </ul>
  <p>Возвращаемое значение:
  <ul>
	<li>true  - у владельца нет ресурсов
	<li>false - у владельца есть ресурсы
  </ul>
#end

function IsEmpty(cMaster : comp) : boolean;
{
  if (not iResMaterials.IsEmpty(cMaster))
	IsEmpty := false;
  else if (not iResPersons.IsEmpty(cMaster))
	IsEmpty := false;
  else
	IsEmpty := true;
}

//------------------------------------------------------------------------------

#doc
  <p>Функция удаляет все ресурсы у заданного владельца.</brief>
  <p>Параметры:
  <ul>
	<li>cMaster - NRec владельца ресурсов
  </ul>
  <p>Возвращаемое значение:
  <ul>
	<li>true  - удаление прошло успешно
	<li>false - в противном случае
  </ul>
#end

function DeleteAll(cMaster : comp) : boolean;
{
  if (not iResMaterials.DeleteAll(cMaster))
	DeleteAll := false;
  else if (not iResPersons.DeleteAll(cMaster))
	DeleteAll := false;
  else
	DeleteAll := true;
}

//------------------------------------------------------------------------------

#doc
  <p>Функция копирует ресурсы владельца cFrom владельцу cTo.</brief>
  Если копируемый ресурс у владельца-приемника уже есть,
  то его количество увеличивается, новая запись не создается.
  <p>Параметры:
  <ul>
	<li>cFrom   - NRec владельца, чьи ресурсы копируются
	<li>cTo	 - NRec владельца, куда ресурсы копируются
	<li>status  - вид расчета (значение поля Status)
	<li>sumP	- общая плановая стоимость ресурса
	<li>sumF	- общая фактическая стоимость ресурса
  </ul>
  <p>Возвращаемое значение:
  <ul>
	<li>true  - копирование прошло успешно
	<li>false - в противном случае
  </ul>
#end

function CopyAll(cFrom, cTo : comp; status : byte; var sumP, sumF : double) : boolean;
{
  sumP	:= 0;
  sumF	:= 0;
  var sumP1 : double;
  var sumF1 : double;
  CopyAll := false;

  if (iResMaterials.CopyAll(cFrom, cTo, status, sumP1, sumF1))
  {
	sumP := sumP + sumP1;
	sumF := sumF + sumF1;
  }
  else
	exit;

  if (iResPersons.CopyAll(cFrom, cTo, status, sumP1, sumF1))
  {
	sumP := sumP + sumP1;
	sumF := sumF + sumF1;
  }
  else
	exit;

  CopyAll := true;
}

//---------------------------------------------------------

tabbedsheet TOP tabExpensEdit;

  embedded embResMat 'Материалы' interface iResMaterials;
  end;

  embedded embResPsn 'Исполнители' interface iResPersons;
  end;

end; // tabExpensEdit

//---------------------------------------------------------

handleEvent

cmOnVipLoad:
{
  iResMaterials := new (C_CORE::MaterialsEdit, InitMasterCode(resProject));
  iResPersons   := new (C_CORE::ExecutorsEdit, InitMasterCode(resProject));
  BindEvent (ResourceSumChanged, iResMaterials.SumChanged);
  BindEvent (ResourceSumChanged, iResPersons.SumChanged);
}

cmOnVipUnload:
{
  UnBindEvent (ResourceSumChanged, iResMaterials.SumChanged);
  UnBindEvent (ResourceSumChanged, iResPersons.SumChanged);
}

end; // handleEvent
end.