/************************************************************************/
/*                     Не задан сотрудник                               */
/************************************************************************/

#define bad_person_return_bool \
	if(!m_api->m_categ_mgr.GetCurrentPerson()) \
	{ \
	if(m_api->m_ModeInteractive) \
	MessageBox(0, APL_T("Для пользователя не задан сотрудник. Работа с требованием невозможна."), APL_T("Ошибка"), MB_ICONSTOP); return false;\
	} \

#define bad_person_return_inst \
	if(!m_api->m_categ_mgr.GetCurrentPerson()) \
	{ \
	if(m_api->m_ModeInteractive) \
	MessageBox(0, APL_T("Для пользователя не задан сотрудник. Работа с требованием невозможна."), APL_T("Ошибка"), MB_ICONSTOP); return 0;\
	} \

/************************************************************************/
/*                  Плохой инстанс                                      */
/************************************************************************/

#define bad_instance_return_bool(cit) \
	if(cit==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Инстанс = 0."), APL_T("Неверные данные"), MB_ICONSTOP); return false;}\
	if(cit->GetType()==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект удален."), APL_T("Неверный тип данных"), MB_ICONSTOP); return false;}\
	if(cit->GetAccessmode()>aplRO) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Недостаточно прав!"), APL_T("Нет доступа"), MB_ICONSTOP); return false;};

#define bad_instance_return_void(cit) \
	if(cit==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Инстанс = 0."), APL_T("Неверные данные"), MB_ICONSTOP); return;}\
	if(cit->GetType()==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект удален."), APL_T("Неверный тип данных"), MB_ICONSTOP); return;}\
	if(cit->GetAccessmode()>aplRO) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Недостаточно прав!"), APL_T("Нет доступа"), MB_ICONSTOP); return;};

#define bad_instance_return_inst(cit) \
	if(cit==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Инстанс = 0."), APL_T("Неверные данные"), MB_ICONSTOP); return 0;}\
	if(cit->GetType()==0) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект удален."), APL_T("Неверный тип данных"), MB_ICONSTOP); return 0;}\
	if(cit->GetAccessmode()>aplRO) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Недостаточно прав!"), APL_T("Нет доступа"), MB_ICONSTOP); return 0;};

/************************************************************************/
/*                 Плохой m_api                                         */
/************************************************************************/

#define bad_api_return_bool \
	if(m_api==0) {MessageBox(0, APL_T("API не инициализирован."), APL_T("Неверные данные"), MB_ICONSTOP); return false;}\
	if(m_api->m_data.IsConnected()==false) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Соединение с базой не установлено."), APL_T("Ошибка соединения"), MB_ICONSTOP); return false;}\

#define bad_api_return_void \
	if(m_api==0) {MessageBox(0, APL_T("API не инициализирован."), APL_T("Неверные данные"), MB_ICONSTOP); return;}\
	if(m_api->m_data.IsConnected()==false) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Соединение с базой не установлено."), APL_T("Ошибка соединения"), MB_ICONSTOP); return;}\

#define bad_api_return_inst \
	if(m_api==0) {MessageBox(0, APL_T("API не инициализирован."), APL_T("Неверные данные"), MB_ICONSTOP); return 0;}\
	if(m_api->m_data.IsConnected()==false) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Соединение с базой не установлено."), APL_T("Ошибка соединения"), MB_ICONSTOP); return 0;}\

/************************************************************************/
/*          Плохое требование                                           */
/************************************************************************/

#define not_requirement_return_bool(cit) \
	if(!m_api->m_data.IsKindOf(cit, e_requirement)) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект не является требованием."), APL_T("Не требование"), MB_ICONSTOP); return false;}\

#define not_requirement_return_void(cit) \
	if(!m_api->m_data.IsKindOf(cit, e_requirement)) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект не является требованием."), APL_T("Не требование"), MB_ICONSTOP); return;}\

#define not_requirement_return_inst(cit) \
	if(!m_api->m_data.IsKindOf(cit, e_requirement)) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Объект не является требованием."), APL_T("Не требование"), MB_ICONSTOP); return 0;}\
/************************************************************************/
/*          Не задан отдел снабжения                                    */
/************************************************************************/

#define bad_supply_return_inst \
	if(NULL == m_ciSupply) {if(m_api->m_ModeInteractive) MessageBox(0, APL_T("Для работы с операциями по складам необходимо задать отдел снабжения!"), APL_T("Отдел снабжения не задан"), MB_ICONSTOP); return 0;}\

/************************************************************************/
/*                Открыть / Сохранить                                   */
/************************************************************************/

#define get_file_path_save(path, ext, filter) \
	if(path.IsEmpty()) path = GetFilePath(FALSE, ext, filter); \
	if(path.IsEmpty()) return false;

#define get_file_path_open(path, ext, filter) \
	if(path.IsEmpty()) path = GetFilePath(TRUE, ext, filter); \
	if(path.IsEmpty()) return false;

