• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/model/schedule/scheduletable.php
  • Класс: BitrixTimemanModelScheduleScheduleTable
  • Вызов: ScheduleTable::getMap
static function getMap()
{
	return [
		(new FieldsIntegerField('ID'))
			->configurePrimary(true)
			->configureAutocomplete(true)
		,
		(new FieldsStringField('NAME'))
		,
		(new FieldsEnumField('SCHEDULE_TYPE'))
			->configureValues([
				static::SCHEDULE_TYPE_FIXED,
				static::SCHEDULE_TYPE_FLEXTIME,
				static::SCHEDULE_TYPE_SHIFT,
			])
			->configureDefaultValue(static::SCHEDULE_TYPE_FIXED)
		,
		(new FieldsEnumField('REPORT_PERIOD'))
			->configureValues([
				static::REPORT_PERIOD_WEEK,
				static::REPORT_PERIOD_TWO_WEEKS,
				static::REPORT_PERIOD_MONTH,
				static::REPORT_PERIOD_QUARTER,
			])
			->configureDefaultValue(static::REPORT_PERIOD_MONTH)
		,
		(new FieldsArrayField('REPORT_PERIOD_OPTIONS'))
			->configureSerializeCallback(function ($value) {
				try
				{
					return Json::encode($value);
				}
				catch (Exception $exc)
				{
					return Json::encode([]);
				}
			})
			->configureUnserializeCallback(function ($value) {
				try
				{
					return Json::decode($value);
				}
				catch (Exception $exc)
				{
					return [];
				}
			})
		,
		(new FieldsIntegerField('CALENDAR_ID'))
		,
		(new FieldsArrayField('ALLOWED_DEVICES'))
			->configureSerializeCallback(function ($value) {
				try
				{
					return Json::encode($value);
				}
				catch (Exception $exc)
				{
					return Json::encode([]);
				}
			})
			->configureUnserializeCallback(function ($value) {
				try
				{
					return Json::decode($value);
				}
				catch (Exception $exc)
				{
					return Json::decode('[]');
				}
			})
		,
		(new FieldsEnumField('DELETED'))
			->configureValues([
				static::DELETED_YES,
				static::DELETED_NO,
			])
			->configureDefaultValue(static::DELETED_NO)
		,
		(new FieldsBooleanField('IS_FOR_ALL_USERS'))
			->configureDefaultValue(0)
			->configureValues(0, 1)
		,
		(new FieldsArrayField('WORKTIME_RESTRICTIONS'))
			->configureDefaultValue([])
			->configureSerializeCallback(function ($value) {
				try
				{
					return Json::encode($value);
				}
				catch (Exception $exc)
				{
					return Json::encode([]);
				}
			})
			->configureUnserializeCallback(function ($value) {
				try
				{
					return Json::decode($value);
				}
				catch (Exception $exc)
				{
					return [];
				}
			})
		,
		(new FieldsIntegerField('CONTROLLED_ACTIONS'))
		,
		(new FieldsIntegerField('UPDATED_BY'))
		,
		(new FieldsIntegerField('DELETED_BY'))
		,
		(new FieldsStringField('DELETED_AT'))
		,
		(new FieldsIntegerField('CREATED_BY'))
			->configureDefaultValue(function () {
				global $USER;
				if ($USER && is_object($USER))
				{
					return $USER->GetID();
				}
				return 0;
			})
		,
		(new FieldsDatetimeField('CREATED_AT'))
			->configureDefaultValue(function () {
				return new MainTypeDateTime();
			})
		,

		# relations
		(new OneToMany('SHIFTS', ShiftTable::class, 'SCHEDULE')) // active, not deleted
			->configureJoinType('left')
		,
		(new OneToMany('ALL_SHIFTS', ShiftTable::class, 'SCHEDULE_WITH_ALL_SHIFTS')) // deleted too
			->configureJoinType('left')
		,
		(new Reference(
			'SCHEDULE_VIOLATION_RULES',
			ViolationRulesTable::class,
			Join::on('this.ID', 'ref.SCHEDULE_ID')->where('ref.ENTITY_CODE', EntityCodesHelper::getAllUsersCode())
		))
			->configureJoinType('LEFT')
		,
		(new Reference(
			'CALENDAR',
			CalendarTable::class,
			Join::on('this.CALENDAR_ID', 'ref.ID')
		))
			->configureJoinType('LEFT')
		,
		(new OneToMany('USER_ASSIGNMENTS', ScheduleUserTable::class, 'SCHEDULE'))
			->configureJoinType('LEFT')
		,
		(new OneToMany('DEPARTMENT_ASSIGNMENTS', ScheduleDepartmentTable::class, 'SCHEDULE'))
			->configureJoinType('LEFT')
		,
	];
}