Подсистема "Налогообложение" интегрированной информационной системы Департамента управления имуществом городского округа Самара

Разработка логической модели базы данных. Выбор и обоснование средств комплекса программно-технических средств. Особенность описания интерфейсных решений. Характеристика создания руководства пользователя. Анализ диаграммы компонентов и развертывания.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 08.10.2018
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Факультет информационных систем и технологий

Кафедра прикладной математики и вычислительной техники

УТВЕРЖДЕНО

643.02068389.40100.12.И2.01-ЛУ

ПОДСИСТЕМА «НАЛОГООБЛОЖЕНИЕ» ИНТЕГРИРОВАННОЙ ИНФОРМАЦИОННОЙ СИСТЕМЫ ДЕПАРТАМЕНТА НЕДВИЖИМОСТИ ГОРОДСКОГО ОКРУГА САМАРА

Руководство пользователя

643.02068389.40100.12.И2.01

(вид носителя данных)

Листов 11

А.1 Введение

Для запуска системы в условиях локального сервера необходимо открыть браузер, в строке адреса прописать. При этом необходимо, чтобы на рабочей станции был запущен сервер приложений и Oracle 10gExpressDatabase (OracleXEService). После запуска появляется страница авторизации, представленная на рисунке А.1.

Рисунок А.1 - Страница авторизации

А.2 Необходимые условия применения

Минимальные требования к техническому и программному обеспечению:

- IBM PC - совместимый компьютер с тактовой частотой процессора не ниже 500 МГц;

- объем оперативной памяти не менее 512 Мб;

- объем свободного дискового пространства не менее 280 Мб;

- монитор с разрешением 12801024;

- манипулятор типа «мышь»;

- тип операционной системы - Windows 7, WindowsServer 2008.

А.3 Описание основных функций системы

А.3.1 Ведение справочников

Ведением справочников занимается администратор БД. Для перехода к выбору справочника необходимо войти в систему на правах администратора БД и нажать ссылку «Работа со справочниками» (рисунок А.2).

Рисунок А.2 - Страница выбора справочника

Для перехода к справочнику необходимо нажать соответствующую строку. Рассмотрим работу с основными справочниками системы.

A.3.1.1 Ведение справочника кодов бюджетной классификации

Для перехода к справочнику необходимо нажать «Коды бюджетной классификации» (рисунок А.3).

Рисунок А.3 - Справочник кодов бюджетной классификации

Чтобы добавить КБК, необходимо нажать ссылку «Добавить». Система перейдет на форму добавления КБК (рисунок А.4). Далее нужно ввести код и словесное описание и нажать кнопку «Сохранить». После этого система добавляет запись в БД и переходит на страницу справочника (при условии отсутствия дублирования кода).

Рисунок А.4 - Добавление КБК

Чтобы отредактировать запись, необходимо нажать кнопку редактировать, выделив запись КБК. Система перейдет на форму редактирования КБК (рисунок А.5). Для редактирования нужно изменить сведения в записи и нажать кнопку «Сохранить». После этого система редактирует запись в БД и переходит к справочнику (при условии корректности ввода, отсутствия дублирования кодов и соблюдения ограничения целостности).

Рисунок А.5 - Редактирование КБК

Для удаления необходимо нажать кнопку «Удалить», выделив запись.

Рисунок А.6 - Подтверждение удаления.

A.3.1.2 Ведение справочника единиц измерения

Для перехода к справочнику единиц измерений необходимо выбрать «Единицы измерения» (рисунок А.7).

Рисунок А.7 - Справочник единиц измерения

Чтобы добавить единицу, необходимо нажать на кнопку «Добавить». Система перейдет на страницу добавления (форма добавления/редактирования является динамическим WPF-компонентом. Он изменяет свой внутренний контент в зависимости от типа, который его наполняет в данный момент. Для каждого типа создаётся «DomainModel», ассоциативно с каждым типом, на форму загружается нужная модель). Это обеспечивает удобство и не загруженность проекта при реализации.

А.3.2 Ведение оперативной информации. Ведение списка налоговых записей.

При ведении оперативной информации алгоритм отличается от ведения справочников. Вначале надо найти объект недвижимости, по которому надо вести информацию. Для этого с главной формы приложения (рисунок А.8) нужно нажать кнопку «Налогообложение». После выбрать узел «Поиск земельного участка» и нажать в окне детализации кнопку «Поиск по кадастровому номеру» (рисунок А.9). Далее нужно ввести номер объекта недвижимости (ОН), поставить флаг искать номер целиком или его вхождения и нажать кнопку «Сохранить» (рисунок А.10).

Рисунок А.8 - Главная форма

Рисунок А.9 - Поиск ОН

Рисунок А.10 - Форма параметров поиска

В получившемся списке необходимо выделить запись и нажать кнопку «Просмотр». После чего появится форма для работы с налоговыми записями в данном ОН (рисунок А.11)

Рисунок А.11 - Форма работы с налоговыми записями

Чтобы большое количество информации не загромождало экранное пространство данные сгруппированы по годам и налогоплательщикам. Для редактирования нужно выбрать запись на последнем уровне и нажать кнопку «Редактировать», после чего появится форма редактирования записи (рисунок А.12). Отредактировать поля и нажать на кнопку «Сохранить». Для удаления необходимо нажать кнопку «Удалить», выделив запись. После этого система редактирует/удаляет запись в БД и возвращается к списку налоговых записей.

Рисунок А.12 - Форма редактирования налоговой записи

Для добавления новой налоговой записи надо нажать кнопку «Добавить». Откроется точно такая же форма, как форма редактирования (рисунок А.10), но незаполненная данными.

А.3.3Формирование отчетов

Формированием отчетов занимается оператор системы. Для работы с отчетами необходимо войти в систему на правах оператора, войти в меню «Налогообложение», последовательно перейти по узлам дерева Землепользование - Поиск земельного участка.

В системе реализовано 2 отчета: отчет о налоговых записях, поставленных на особый контроль и отчёт о налогоплательщиках за конкретный год.

A.3.3.1 Отчет об ОН, поставленных на особый налоговый контроль.

Необходимо выбрать кнопку «Найти записи, поставленные на особый контроль». Система откроет форму параметров отчёта. Необходимо ввести даты или выбрать их с помощью пиккеров, для которых будет сформирован отчет: база данный интерфейсный развертывание

· начала периода;

· окончания периода.

Нажать кнопку «Сохранить» (рисунок А.13).

Рисунок А.13 - Отчёт о налоговых записях, поставленных на особый контроль

Система отобразит отчет в том же окне, предварительно отфильтровав их по статусу «Контроль» и датам, указанным, как параметры.

A.3.3.2 Отчет о налогоплательщиках.

Для формирования отчёта о налогооблагаемых нужно выбрать пункт меню «Налогообложение» и перейти по узлам дерева на узел «Поиск земельного участка». Там на панели инструментов найти кнопку «Поиск по налогооблагаемым». На открывшейся форме, изображённой на рисунке А.14, добавить из справочников физических и юридических лиц записи в таблицу поиска и нажить «Сохранить».

Рисунок А.14- форма ввода параметров отчёта о налогооблагаемых

A.4.1Импорт записей в БД.

Для того чтобы произвести импорт записей в БД, на главной форме приложения необходимо выбрать пункт меню «Импорт данных». Выбрать узел дерева, соответствующий тому типу импорта, который нужно произвести. Далее нужно нажать кнопку «Добавить» на панели инструментов, изображённую в виде зелёного плюса. Откроется диалог, где нужно указать путь к файлу импорта (xml-выгрузка).

Листинг основных модулей программы

public class OwnerSearchResultViewModel : BaseEventsViewModel<OwnerSearchResultView>, IEntityDetailsViewModel<object>

{

private object _entity;

private bool _isNoTaxRecords;

private InventoryObject _cadBlock;

private ObservableCollection<RightType> _rightTypes;

private int _year;

public int Year

{

get { return _year; }

set

{

if (_year != value)

_year = value;

OnPropertyChanged("Year");

}

}

public InventoryObject CadastralBlock

{

get { return _cadBlock;}

set

{

if (_cadBlock != value)

{

_cadBlock = value;

InventrObjectChoiceViewModel.Entity = value;

}

OnPropertyChanged("CadastralBlock");

}

}

public ObservableCollection<RightType> RightTypes

{

get { return _rightTypes; }

set

{

if (_rightTypes != value)

_rightTypes = value;

OnPropertyChanged("RightTypes");

}

}

public bool IsNoTaxRecords

{

get { return _isNoTaxRecords; }

set

{

if (_isNoTaxRecords != value)

{

_isNoTaxRecords = value;

OnPropertyChanged("IsNoTaxRecords");

}

}

}

public class SomeConverter : IValueConverter

{

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

{

ObservableCollection<RightType> collection = value as ObservableCollection<RightType>;

if (collection == null)

return string.Empty;

return string.Join(", ",collection.Select(c => c.Name));

}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

{

throw new NotImplementedException();

}

}

public EntityChoiceControlViewModel<InventoryObject> InventrObjectChoiceViewModel { get; private set; }

public EntityMultiSelectChoiceViewModel<RightType> RightTypeChoiceViewModel { get; private set; }

public OwnerSearchResultViewModel(OwnerSearchResultView view, IUnityContainer innerContainer)

: base(view, innerContainer)

{

OkCommmand = new DelegateCommand<object>(DoOkCommand);

CancelCommmand = new DelegateCommand<object>(DoCancelCommand);

InventrObjectChoiceViewModel = InnerContainer.Resolve<EntityChoiceControlViewModel<InventoryObject>>();

InventrObjectChoiceViewModel.View.SetBinding(EntityChoiceControl.TextProperty, new System.Windows.Data.Binding("Entity.Number"));

RightTypeChoiceViewModel = innerContainer.Resolve<EntityMultiSelectChoiceViewModel<RightType>>();

RightTypeChoiceViewModel.Entity = (ObservableCollection<RightType>)_entity ?? new ObservableCollection<RightType>();

Binding binding = new Binding("Entity");

binding.Converter = new SomeConverter();

RightTypeChoiceViewModel.View.SetBinding(EntityChoiceControl.TextProperty, binding);

}

private void DoOkCommand(object parameter)

{

_cadBlock = InventrObjectChoiceViewModel.Entity;

_rightTypes = RightTypeChoiceViewModel.Entity;

if (OkCompleted != null)

OkCompleted(this, new EntityEventArgs<object>(_entity));

}

private void DoCancelCommand(object parameter)

{

if (CancelCompleted != null)

CancelCompleted(this, new EventArgs());

}

public object Entity

{

get

{

return _entity;

}

set

{

if (_entity != value)

_entity = value;

OnPropertyChanged("Entity");

}

}

public void BrowseError(string errorText)

{

}

public ICommand OkCommmand { get; set; }

public ICommand CancelCommmand { get; set; }

public event EventHandler<Kz.WebFusion.Client.Common.Core.Controls.EventArguments.EntityEventArgs<object>> OkCompleted;

public event EventHandler CancelCompleted;

}

public class RecommendTaxesFilterViewModel : BaseEventsViewModel<RecommendTaxesFilterView>, IEntityDetailsViewModel<object>

{

private DateTime _dateStart;

private DateTime _dateEnd;

private object _entity;

public RecommendTaxesFilterViewModel(RecommendTaxesFilterView view, IUnityContainer innerContainer)

: base(view, innerContainer)

{

OkCommmand = new DelegateCommand<object>(DoOkCommand);

CancelCommmand = new DelegateCommand<object>(DoCancelCommand);

DateStart = new DateTime(2000, 01, 01);

DateEnd = DateTime.Now;

}

private void DoOkCommand(object parameter)

{

if (OkCompleted != null)

OkCompleted(this, new EntityEventArgs<object>(_entity));

}

private void DoCancelCommand(object parameter)

{

if (CancelCompleted != null)

CancelCompleted(this, new EventArgs());

}

public DateTime DateStart

{

get { return _dateStart; }

set

{

if (_dateStart != value)

{

_dateStart = value;

OnPropertyChanged("DateStart");

}

}

}

public DateTime DateEnd

{

get { return _dateEnd; }

set

{

if (_dateEnd != value)

{

_dateEnd = value;

OnPropertyChanged("DateEnd");

}

}

}

public object Entity { get; set; }

public void BrowseError(string errorText)

{

}

public ICommand OkCommmand { get; set;}

public ICommand CancelCommmand { get; set; }

public event EventHandler<EntityEventArgs<object>> OkCompleted;

public event EventHandler CancelCompleted;

}

public class EntityListViewModel<TEntity> : BaseEventsViewModel<EntityListView>, ISortable, ICommonEntityDetailsViewModel<TEntity>

where TEntity : class, new()

{

private const string SEARCH_TEXT = "SearchText";

private const string SELECTED_ENTITY = "SelectedEntity";

private Visibility _toolbarVisibility = Visibility.Visible;

public event EventHandler<EventArgs> OnDataLoaded;

public event EventHandler<EventArgs> OnEntityRemoved;

public virtual Visibility SearchVisibility

{

get

{

return Visibility.Visible;

}

}

public virtual Visibility ToolbarVisibility

{

get

{

return _toolbarVisibility;

}

set

{

if (_toolbarVisibility != value)

{

_toolbarVisibility = value;

OnPropertyChanged("ToolbarVisibility");

}

}

}

public override void Dispose()

{

base.Dispose();

if (_vmEditor != null)

{

_vmEditor.OkCompleted -= VmEditorSaveChanges;

_vmEditor.Cancelled -= VmEditorCancelChanges;

_vmEditor.AfterLoad -= VmDetailsAfterLoad;

}

if (_vmFilter != null)

{

_vmFilter.ApplyFilter -= VmFilterApplyFilter;

_vmFilter.CancelFilter -= VmFilterCancelFilter;

}

_list = null;

_repository = null;

_rwFilter = null;

_selectedEntity = null;

_vmEditor = null;

_vmFilter = null;

GC.SuppressFinalize(this);

}

/// <summary>

/// Репозиторийредактируемойсущности

/// </summary>

protected BaseRepository<TEntity> _repository;

/// <summary>

/// Текущая редактируемая сущность, используется для запоминания результата ответа сервиса,

/// чтобы присвоить в котрол отображения свойств п

/// озже, после получения всех справочных списков,

/// поскольку на момент получения редактируемой сущности, еще может не быть всех справочных списков для нее

/// </summary>

private TEntity _currentEditableEntity;

/// <summary>

/// Контрол отображения редактируемы свойств сущности

/// </summary>

//protected IEntityDetailsViewModel<TEntity> _vmDetails;

/// <summary>

/// Контролредактированиясущности

/// </summary>

protected EntityEditorViewModel<TEntity> _vmEditor;

/// <summary>

/// Диалоговое окно отображения фильтра

/// </summary>

private KzRadWindow _rwFilter;

/// <summary>

/// Контролфильтра

/// </summary>

private EntityFilterControlViewModel _vmFilter;

public ServerFilter Filter { get; set; }

/// <summary>

/// Внимание: в конструкторе вызывается метод InitEntityEditor.

/// Могут возникнуть проблемы с получением редактора сущности.

/// Предварительно нужно его зарегистрировать.

/// Либо перегрузить в наследнике InitEntityEditor.

/// </summary>

public EntityListViewModel(EntityListView view, IUnityContainer innerContainer)

: base(view, innerContainer)

{

Filter = new ServerFilter();

SearchCommand = new DelegateCommand<object>(DoSearch);

ClearSearchCommand = new DelegateCommand<object>(DoClearSearch);

AddEntityCommand = new DelegateCommand<object>(DoAddEntity);

EditEntityCommand = new DelegateCommand<object>(DoEditEntity);

RemoveEntityCommand = new DelegateCommand<object>(DoRemoveEntity);

MarkDeletedEntityCommand = new DelegateCommand<object>(DoMarkDeletedEntity);

RestoreEntityCommand = new DelegateCommand<object>(DoRestoreEntity);

ShowMarkDeletedEntitiesCommand = new DelegateCommand<object>(DoShowMarkDeletedEntities);

RefreshPageCommand = new DelegateCommand<object>(DoRefreshPage);

SelectEntityCommand = new DelegateCommand<object>(DoSelectEntity);

SortPageCommand = new DelegateCommand<object>(DoSortPage);

ShowFilterCommand = new DelegateCommand<object>(DoShowFilter);

PrintPageCommand = new DelegateCommand<object>(DoPrintLog);

OkCommmand = new DelegateCommand<object>(DoOkCommand);

CancelCommmand = new DelegateCommand<object>(DoCancelCommand);

DoubleClickCommand = new DelegateCommand<object>(DoDoubleClick);

ShowNotActualRecordsButtonVisibility = (IsPeriodicalEntity()) ? Visibility.Visible : Visibility.Collapsed;

EntityFilterButtonVisibility = (IsFilterableEntity()) ? Visibility.Visible : Visibility.Collapsed;

QuickSearchVisibility = (IsQuickSearchable()) ? Visibility.Visible : Visibility.Collapsed;

PagingVisibility = Visibility.Visible;

// Заполняем колонки в зависимости типа объекта

View.PopulateColumns(typeof(TEntity));

// Инициализируем репозиторий

_repository = innerContainer.Resolve<BaseRepository<TEntity>>();

// получаемсписоксущностей

//_repository.SelectAll((x => { List = x; ShowLoading = false; }), delegate() { ShowLoading = false; });

ShowLoading = true;

_showDeletedRecords = false;

_showNotActualRecords = false;

//GridViewFilterRow.SetIsEnabled(View._, true);

//DoRefreshPage(null);

}

public override void Show()

{

RefreshPageCommand.Execute(null);

base.Show();

}

public RadGridView GridView

{

get { return View._grid; }

}

public virtual string RefName { get; set; }

protected void CreateOrUpdateSorter(string propertyName, string columnName)

{

if (View.Sorter != null)

{

var allreadyExist = false;

foreach (var entry in View.Sorter.Values)

{

if (entry.ColumnName == columnName)

{

allreadyExist = true;

switch (entry.State)

{

case ServerSorterState.None:

entry.State = ServerSorterState.Asc;

break;

case ServerSorterState.Asc:

entry.State = ServerSorterState.Desc;

break;

case ServerSorterState.Desc:

entry.State = ServerSorterState.None;

break;

}

}

if (allreadyExist == false)

{

View.Sorter.Values.Clear();

View.Sorter.Values.Add(new ServerSorterEntry

{

PtopertyName = propertyName,

State = ServerSorterState.Asc,

ColumnName = columnName

});

return;

}

}

}

else

{

View.Sorter = new ServerSorter

{

Values = new List<ServerSorterEntry>

{

new ServerSorterEntry

{

PtopertyName = propertyName,

State = ServerSorterState.Asc,

ColumnName = columnName

}

}

};

}

}

private void DoSortPage(object obj)

{

if (obj.ToString().IndexOf("Sp") > 0)

{

string columnName = obj.ToString();

string propertyName = columnName.Remove(columnName.IndexOf("Sp"), columnName.Length - columnName.IndexOf("Sp"));

//CreateOrUpdateSorter(propertyName, obj as string);

CreateOrUpdateSorter(propertyName, columnName);

RefreshPageCommand.Execute(null);

}

}

protected virtual void SelectPage(int? firstIndex, int? rowCount, ServerFilter filter, ServerSorter sorter,

bool? isDeleted, bool? isNotActual)

{

ShowLoading = true;

var periodicalAttr =

typeof(TEntity).GetCustomAttributes(typeof(PeriodicalAttribute), true).FirstOrDefault() as

PeriodicalAttribute;

// для периодической сущности вызываем перегрузку метода в репозитории

if (periodicalAttr != null)

{

_repository.SelectPage(firstIndex, rowCount, filter, sorter, isDeleted, isNotActual,

OnSelectPageCompleted, OnError);

}

else

{

_repository.SelectPage(firstIndex, rowCount, filter, sorter, isDeleted,

OnSelectPageCompleted, OnError);

}

}

protected virtual void OnSelectPageCompleted(EntityPageInfo info, object userData)

{

if (info == null)

throw new ArgumentNullException("info");

if (info.List == null)

throw new NullReferenceException("info.List");

if (info.List.Count == 0)

{

if (info.TotalEntityCount > 0)

{

CurrentPage--;

RefreshPageCommand.Execute(null);

return;

}

}

// показывать ли "дополнительные" столбцы

if (ShowDeletedRecords.HasValue)

View.IsDeletedColumnVisible = ShowDeletedRecords.Value;

if (ShowNotActualRecords.HasValue)

View.IsActualColumnVisible = ShowNotActualRecords.Value;

// настройкапейджинга

var entityCount = info.TotalEntityCount;

List = info.List.ToObservableCollectionCast<TEntity>();

PageCount = Convert.ToInt32(

Math.Abs((

(entityCount > 0

? entityCount - 1

: 0)/

ClientConfig.OnPageRowCount) + 1));

PagingCaption =

string.Format(

LocalizedStrings.Paging_ShowEntityFromTo,

(CurrentPage - 1) * ClientConfig.OnPageRowCount +

(entityCount == 0

? 0

: 1),

CurrentPage * ClientConfig.OnPageRowCount < entityCount

? CurrentPage * ClientConfig.OnPageRowCount

: entityCount,

entityCount);

//var headerRow = View._grid.ChildrenOfType<GridViewHeaderRow>().FirstOrDefault();

//if (headerRow != null)

//{

// var gridViewFilterRow = new EntityListView.GridViewSorterRow(View._grid, View.Sorter);

// gridViewFilterRow.InitializeFilters(headerRow);

//}

ShowLoading = false;

if (OnDataLoaded != null)

OnDataLoaded(this, new EventArgs());

}

private string _pagingCaption;

public string PagingCaption

{

get { return _pagingCaption; }

set

{

_pagingCaption = value;

OnPropertyChanged("PagingCaption");

}

}

/// <summary>

/// Инициализациямоделиредактированиясущности

/// </summary>

/// <param name="headerText">Заголовококна.</param>

protected virtual void InitEntityEditor(string headerText)

{

// NOTE: Ugly hack to position entity editor

//_rwEditor.WindowStartupLocation = WindowStartupLocation.CenterScreen;

//_rwEditor.Left = (Application.Current.RootVisual.RenderSize.Width / 2.0) - 300;

//_rwEditor.Top = 100;

// _vmEditor = InnerContainer.Resolve<EntityEditorViewModel>();

//_vmDetails = InnerContainer.Resolve<EntityAutoDetailsViewModel>();

if (_vmEditor != null)

{

_vmEditor.OkCompleted -= VmEditorSaveChanges;

_vmEditor.Cancelled -= VmEditorCancelChanges;

_vmEditor.AfterEntityDetailsViewLoad -= VmDetailsAfterLoad;

_vmEditor.IsAutoHide = false;

}

_vmEditor = InnerContainer.ResolveEditorModel<TEntity>();

_vmEditor.AfterEntityDetailsViewLoad += VmDetailsAfterLoad;

_vmEditor.OkCompleted += VmEditorSaveChanges;

_vmEditor.Cancelled += VmEditorCancelChanges;

}

private void VmDetailsAfterLoad(object sender, AfterLoadEventArgs e)

{

AfterLoadDetails(sender, e);

}

protected virtual void AfterLoadDetails(object sender, AfterLoadEventArgs e)

{

}

private void VmEditorCancelChanges(object sender, EventArgs e)

{

CloseEditor();

}

protected virtual void VmEditorSaveChanges(object sender, EntityEventArgs<TEntity> e)

{

_vmEditor.ShowLoading = true;

ShowLoading = true;

//_repository.SaveOrUpdate((TEntity)e.Entity, SaveOrUpdateCompleted, ErrorHandler);

//CloseEditor();

_repository.SaveOrUpdate(e.Entity, SaveOrUpdateCompleted, EditorSaveChangesErrorHandler);

}

protected void EditorSaveChangesErrorHandler(object userData, Exception ex)

{

this.ErrorHandler(userData, ex);

}

private static bool IsPeriodicalEntity()

{

var type = typeof(TEntity);

var attr = type.GetCustomAttributes(typeof(PeriodicalAttribute), true)

.FirstOrDefault() as PeriodicalAttribute;

return attr != null;

}

private static bool IsFilterableEntity()

{

int res = 0;

var entityType = typeof(TEntity);

foreach (var prop in entityType.GetProperties(BindingFlags.Instance | BindingFlags.Public))

{

var attr =

prop.GetCustomAttributes(typeof(ListColumnAttribute), true).FirstOrDefault() as

ListColumnAttribute;

if ((attr != null) && (attr.FilterableField))

{

res++;

}

}

return res > 0;

}

private static bool IsQuickSearchable()

{

var periodicalAttr =

typeof(TEntity).GetCustomAttributes(typeof(NonQuickSearchableAttribute), true).FirstOrDefault() as

NonQuickSearchableAttribute;

return (periodicalAttr == null);

}

/// <summary>

/// Загружает все необходимые данные для формы редактирования сущности

/// </summary>

/// <param name="entityId">Идентификатор редактируемой сущности</param>

private void LoadDetailsData(long entityId)

{

// Отправляем запрос на получение редактируемой сущности

_repository.SelectOne(entityId, SelectOneCompleted, ErrorHandler);

}

/// <summary>

/// Создает новую сущность и загружает форму добавления.

/// </summary>

//private void LoadDetailsData()

//{

// _currentEditableEntity = new TEntity();

// OnLoadDetailsDataCompleted();

//}

/// <summary>

/// Вызывается после заверщения загрузки всех данных для формы редактирования.

/// Устанавливает редактируемый объект. Скрывает индикатор загрузки.

/// Паблишетсобытие<see cref="EditEntityEvent"/>

/// </summary>

protected virtual void OnLoadDetailsDataCompleted()

{

_vmEditor.Entity = _currentEditableEntity;

_vmEditor.ShowLoading = false;

//EventAggregator.PublishEvent<EditEntityEvent, Guid>(ViewModelId);

}

protected virtual void ShowEditor(TEntity entity, string headerText, ViewConditions mode)

{

if (entity == null)

throw new ArgumentNullException("entity");

InitEntityEditor(headerText);

_vmEditor.CurrentCondition = mode;

_vmEditor.Entity = entity;

_vmEditor.View.ResizeMode = ResizeMode.NoResize;

//_vmEditor.ShowLoading = true;

_vmEditor.Show(headerText);

}

protected void CloseEditor()

{

_vmEditor.ShowLoading = false;

_vmEditor.Hide();

}

protected virtual ServerFilter CreateFilter()

{

View.SearchTextControl.RefreshSearchTextBox();

// если строка поиска не задана - не формировать фильтр...

var searchFilter = new ServerFilter

{

RootGroup = new ServerFilterEntryGroup

{

Operator = LogicalOperator.And,

Entries = new List<ServerFilterEntry>(),

Groups = new List<ServerFilterEntryGroup>()

}

};

if (!string.IsNullOrEmpty(SearchText))

{

var searchGroup = new ServerFilterEntryGroup

{

Operator = LogicalOperator.Or,

Entries = new List<ServerFilterEntry>()

};

var entityType = typeof(TEntity);

const string delimStr = " ";

var delimiter = delimStr.ToCharArray();

var split = SearchText.Split(delimiter);

searchGroup.Groups = new List<ServerFilterEntryGroup>();

// Финтушамидлябулевых

Regex checkBoolean = new Regex("^Is[A-Z].+");

foreach (var prop in entityType.GetProperties(BindingFlags.Instance | BindingFlags.Public))

{

var attr =

prop.GetCustomAttributes(typeof(ListColumnAttribute), true).FirstOrDefault() as

ListColumnAttribute;

if (attr != null && !String.IsNullOrEmpty(attr.FieldName) &&

// Для дат и чисел QuickSearch не делаем (используем фильтр)

(!((prop.PropertyType == typeof(int)) ||

(prop.PropertyType == typeof(Int64)) ||

(prop.PropertyType == typeof(DateTime)) ||

(prop.PropertyType == typeof(DateTime?)) ||

(prop.PropertyType == typeof(Decimal)) ||

(prop.PropertyType == typeof(Decimal?) ||

(prop.PropertyType == typeof(Double)) ||

(prop.PropertyType == typeof(Byte[])))

)

)

)

{

if (!(prop.PropertyType == typeof(string) &&

checkBoolean.IsMatch(attr.FieldName)))

{

foreach (var s in split)

{

if (attr.HeaderText != "Типбизнес-процесса")

{

var entry = new ServerFilterEntry

{

Type = ServerFilterEntryType.Value,

Operator = ConditionOperator.Like,

//0,

PropertyName = attr.FieldName,

Values = new List<object>()

};

entry.Values.Add("%" + s + "%");

searchGroup.Entries.Add(entry);

}

else

{

var entry = new ServerFilterEntry

{

Type = ServerFilterEntryType.Value,

PropertyName = "SessionStartDate",

Values = new List<object>()

};

entry.Values.Add(DateTime.MaxValue);

string c = "подключение";

if (c.Contains(s.ToLower()))

{

entry.Operator = ConditionOperator.Less;

}

else

{

entry.Operator = ConditionOperator.Equal;

}

searchGroup.Entries.Add(entry);

}

}

}

}

}

searchFilter.RootGroup.Groups.Add(searchGroup);

}

if (Filter != null)

{

if (Filter.RootGroup != null)

{

searchFilter.RootGroup.Groups.Add(Filter.RootGroup);

searchFilter.RootGroup.Operator = LogicalOperator.And;

}

}

return searchFilter;

}

public override bool IsEnabledEditEntity

{

get

{

return SelectedEntity != null;

}

set

{

nPropertyChanged(ToolbarBuilderNames.ButtonsIsEnabled.IsEnabledEditEntity);

}

}

public override bool IsEnabledRemoveEntity

{

get

{

return SelectedEntity != null;

}

set

{

nPropertyChanged(ToolbarBuilderNames.ButtonsIsEnabled.IsEnabledRemoveEntity);

}

}

//private void RwFilterClosed(object sender, WindowClosedEventArgs e)

//{

// _vmFilter.Show();

//}

private void VmFilterApplyFilter(object sender, EventArgs e)

{

//var entityType = typeof(TEntity);

// Очищаем старый фильтр, при необходимости инициализируем

if (Filter != null)

{

if (Filter.RootGroup != null)

{

if (Filter.RootGroup.Entries != null)

{

Filter.RootGroup.Entries.Clear();

}

else

{

Filter.RootGroup.Groups = new List<ServerFilterEntryGroup>();

}

}

else

{

Filter.RootGroup = new ServerFilterEntryGroup

{

Operator = LogicalOperator.And,

Entries = new List<ServerFilterEntry>()

};

}

}

else

{

Filter = new ServerFilter

{

RootGroup = new ServerFilterEntryGroup

{

Operator = LogicalOperator.And,

Entries = new List<ServerFilterEntry>()

}

};

}

Filter.RootGroup.Operator = LogicalOperator.And;

Filter.RootGroup.Entries.AddRange(_vmFilter.FormFilter().RootGroup.Entries);

_vmFilter.Hide();

_rwFilter.Close();

CurrentPage = 1;

RefreshPageCommand.Execute(null);

}

private void VmFilterCancelFilter(object sender, EventArgs e)

{

_vmFilter.EntityFilterConditions.Clear();

_vmFilter.Hide();

_rwFilter.Close();

}

public void DoShowFilter(object param)

{

// Создаемокно

_rwFilter = InnerContainer.Resolve<KzRadWindow>();

_rwFilter.Header = LocalizedStrings.EntityFilter_WindowCaption;

if (_vmFilter != null)

{

_vmFilter.ApplyFilter -= VmFilterApplyFilter;

_vmFilter.CancelFilter -= VmFilterCancelFilter;

}

// Создаем ViewModel

_vmFilter = InnerContainer.Resolve<EntityFilterControlViewModel>();

_vmFilter.ApplyFilter += VmFilterApplyFilter;

_vmFilter.CancelFilter += VmFilterCancelFilter;

// Вешаем ViewModel наокно

_rwFilter.Content = _vmFilter.View;

//Инициализируем

_vmFilter.InitFieldList(typeof(TEntity));

_vmFilter.DoAdd(null);

// Получившеесяотобразить

_vmFilter.Show();

_rwFilter.ShowDialog();

}

private int _currentPage = 1;

private int _gridColumnSpan = 2;

private ObservableCollection<TEntity> _list;

private long _pageCount;

private Visibility _pagingVisibility = Visibility.Collapsed;

private string _searchText;

private TEntity _selectedEntity;

private bool? _showDeletedRecords = false;

private bool? _showNotActualRecords = false;

private Visibility _showNotActualRecordsButtonVisibility = Visibility.Collapsed;

private Visibility _entityFilterButtonVisibility = Visibility.Collapsed;

private Visibility _quickSearchVisibility = Visibility.Visible;

public string SearchText

{

get { return _searchText; }

set

{

if (_searchText != value)

{

_searchText = value;

OnPropertyChanged(SEARCH_TEXT);

}

}

}

public ObservableCollection<TEntity> List

{

get { return _list; }

set

{

if (_list != value)

{

_list = value;

OnPropertyChanged("List");

}

}

}

public TEntity SelectedEntity

{

get { return _selectedEntity; }

set

{

if (_selectedEntity != value)

{

_selectedEntity = value;

Entity = value;

SelectionEntityChanged();

OnPropertyChanged(SELECTED_ENTITY);

OnPropertyChanged(ToolbarBuilderNames.ButtonsIsEnabled.IsEnabledEditEntity);

OnPropertyChanged(ToolbarBuilderNames.ButtonsIsEnabled.IsEnabledRemoveEntity);

}

}

}

/// <summary>

/// Вызывается при изменении SelectedEntity

/// </summary>

protected virtual void SelectionEntityChanged()

{

// Выставим доступность кнопок или поменяем их иконки/тексты

foreach (var btn in View.Toolbar.Buttons)

{

var _btn = btn as ButtonBase;

if (_btn != null)

{

DoSomethingWithButton(_btn);

}

}

}

/// <summary>

/// Вызывается для каждой кнопки тулбара при смене выделенной строки

/// </summary>

/// <param name="btn"></param>

protected virtual void DoSomethingWithButton(ButtonBase btn)

{

if (btn.Name == ToolbarButtonsNames.MarkDeletedOrRestoreEntity)

{

if (IsMarkDeletedSelectedEntity)

{

btn.Content = CustomToolbarControl.GetImageFromPath("/Kz.WebFusion.Client.Common;component/Images/entity_open.png");

btn.SetValue(ToolTipService.ToolTipProperty, LocalizedStrings.EntityToolbar_Restore);

}

else

{

btn.Content = CustomToolbarControl.GetImageFromPath("/Kz.WebFusion.Client.Common;component/Images/entity_close.png");

btn.SetValue(ToolTipService.ToolTipProperty, LocalizedStrings.EntityToolbar_MarkDeleted);

}

}

}

public bool IsMarkDeletedSelectedEntity

{

get

{

if (SelectedEntity != null)

{

var isDeletedProperty = SelectedEntity.GetType().GetProperty("IsDeleted");

if (isDeletedProperty != null)

{

var isDeletedPropertyValue = isDeletedProperty.GetValue(SelectedEntity, null);

if (isDeletedPropertyValue.GetType().Equals(typeof(bool)))

{

return (bool)isDeletedPropertyValue;

}

}

}

return false;

}

}

public int CurrentPage

{

get { return _currentPage; }

set

{

if (_currentPage != value)

{

_currentPage = value;

RefreshPageCommand.Execute(null);

OnPropertyChanged("CurrentPage");

}

}

}

public long PageCount

{

get { return _pageCount; }

set

{

if (_pageCount != value)

{

_pageCount = value;

PagingVisibility = _pageCount > 1

? Visibility.Visible

: Visibility.Collapsed;

OnPropertyChanged("PageCount");

}

}

}

public int GridColumnSpan

{

get { return _gridColumnSpan; }

set

{

if (_gridColumnSpan != value)

{

_gridColumnSpan = value;

OnPropertyChanged("GridColumnSpan");

}

}

}

public virtual Visibility PagingVisibility

{

get { return _pagingVisibility; }

set

{

if (_pagingVisibility != value)

{

_pagingVisibility = value;

OnPropertyChanged("PagingVisibility");

//if (_pagingVisibility == Visibility.Collapsed) GridColumnSpan = 2;

//else if (_pagingVisibility == Visibility.Visible) GridColumnSpan = 1;

}

}

}

public virtual Visibility ShowNotActualRecordsButtonVisibility

{

get { return _showNotActualRecordsButtonVisibility; }

set

{

if (_showNotActualRecordsButtonVisibility != value)

{

_showNotActualRecordsButtonVisibility = value;

OnPropertyChanged(ToolbarBuilderNames.ButtonsVisibility.ShowNotActualRecordsButtonVisibility);

}

}

}

public Visibility QuickSearchVisibility

{

get { return _quickSearchVisibility; }

set

{

if (_quickSearchVisibility != value)

{

_quickSearchVisibility = value;

OnPropertyChanged("QuickSearchVisibility");

}

}

}

public Visibility EntityFilterButtonVisibility

{

get { return _entityFilterButtonVisibility; }

set

{

if (_entityFilterButtonVisibility != value)

{

_entityFilterButtonVisibility = value;

OnPropertyChanged("EntityFilterButtonVisibility");

}

}

}

public bool? ShowDeletedRecords

{

get { return _showDeletedRecords; }

set

{

if (_showDeletedRecords != value)

{

_showDeletedRecords = value;

OnPropertyChanged("ShowDeletedRecords");

RefreshPageCommand.Execute(null);

foreach (var btn in View.Toolbar.Buttons)

{

var _btn = btn as ButtonBase;

if (_btn != null)

{

if (_btn.Name == ToolbarButtonsNames.ShowOrHideMarkDeleted)

{

if (_showDeletedRecords.HasValue && _showDeletedRecords.Value)

{

_btn.Content = CustomToolbarControl.GetImageFromPath("/Kz.WebFusion.Client.Common;component/Images/hide_deleted_entities.png");

_btn.SetValue(ToolTipService.ToolTipProperty, LocalizedStrings.EntityToolbar_HideDeleted);

}

else

{

_btn.Content = CustomToolbarControl.GetImageFromPath("/Kz.WebFusion.Client.Common;component/Images/show_deleted_entities.png");

_btn.SetValue(ToolTipService.ToolTipProperty, LocalizedStrings.EntityToolbar_ShowDeleted);

}

}

}

}

}

}

}

public bool? ShowNotActualRecords

{

get { return _showNotActualRecords; }

set

{

if (_showNotActualRecords != value)

{

_showNotActualRecords = value;

OnPropertyChanged("ShowNotActualRecords");

RefreshPageCommand.Execute(null);

}

}

}

public ICommand SearchCommand { get; private set; }

public ICommand ClearSearchCommand { get; private set; }

public ICommand AddEntityCommand { get; private set; }

public ICommand EditEntityCommand { get; private set; }

public ICommand RemoveEntityCommand { get; private set; }

public ICommand MarkDeletedEntityCommand { get; private set; }

public ICommand RestoreEntityCommand { get; private set; }

public ICommand ShowMarkDeletedEntitiesCommand { get; private set; }

public ICommand RefreshPageCommand { get; private set; }

public ICommand SelectEntityCommand { get; private set; }

public ICommand SortPageCommand { get; private set; }

public ICommand ShowFilterCommand { get; private set; }

public ICommand PrintPageCommand { get; private set; }

public ICommand DoubleClickCommand { get; private set; }

private void DoDoubleClick(object parameter)

{

OnRowDoubleClick();

}

private void DoSearch(object param)

{

RefreshPageCommand.Execute(param);

}

protected virtual void DoClearSearch(object param)

{

if (!String.IsNullOrEmpty(SearchText)) SearchText = "";

Filter = null;

RefreshPageCommand.Execute(param);

}

private void OnRemoveEntityCompleted(object param, object userdata)

{

ShowLoading = false;

if (OnEntityRemoved != null)

OnEntityRemoved(this, new EventArgs());

RefreshPageCommand.Execute(param);

}

protected virtual void DoRemoveEntity(object param)

{

var e = SelectedEntity as Entity;

if (e != null)

{

RadWindow.Confirm(LocalizedStrings.EntityView_Delete_Tooltip, OnRadConfirmDeleteClosed);

}

}

private void OnRadConfirmDeleteClosed(object sender, WindowClosedEventArgs e)

{

if (e.DialogResult == true)

{

ShowLoading = true;

var se = SelectedEntity as Entity;

if (se != null) _repository.DeleteOne(se.Id, OnRemoveEntityCompleted, OnError);

}

}

protected virtual void OnRowDoubleClick()

{

if (EditEntityVisibility == Visibility.Visible)

DoEditEntity(null);

}

protected virtual void DoMarkDeletedEntity(object param)

{

//if(IsMarkDeletedSelectedEntity)

//{

// return;

//}

var e = SelectedEntity as Entity;

if (e != null)

{

string mess = "";

if (IsMarkDeletedSelectedEntity)

{

mess = LocalizedStrings.EntityView_Restore_Tooltip;

}

else

{

mess = LocalizedStrings.EntityView_MarkDeleted_Tooltip;

}

RadWindow.Confirm(mess, OnRadConfirmMarkDeletedClosed);

}

}

private void OnRadConfirmMarkDeletedClosed(object sender, WindowClosedEventArgs e)

{

if (e.DialogResult == true)

{

ShowLoading = true;

_repository.SelectOne((SelectedEntity as Entity).Id, SelectOneForMarkDeletedCompleted, ErrorHandler);

}

}

private void SelectOneForMarkDeletedCompleted(TEntity result, object userData)

{

// инвертируем пометку на удаление у выделенной сущности

var entityType = result.GetType();

var isDeletedProperty = entityType.GetProperty("IsDeleted");

if (isDeletedProperty != null)

{

var value = (bool)isDeletedProperty.GetValue(result, null);

isDeletedProperty.SetValue(result, !value, null);

}

// сохраним

_repository.SaveOrUpdate(result, OnMarkDeletedEntityCompleted, OnError);

}

private void OnMarkDeletedEntityCompleted(TEntity result, object userdata)

{

ShowLoading = false;

RefreshPageCommand.Execute(null);

}

protected virtual void DoRestoreEntity(object param)

{

var e = SelectedEntity as Entity;

if (e != null)

{

RadWindow.Confirm(LocalizedStrings.EntityView_MarkDeleted_Tooltip, OnRadConfirmRestoreClosed);

}

}

private void OnRadConfirmRestoreClosed(object sender, WindowClosedEventArgs e)

{

if (e.DialogResult == true)

{

ShowLoading = true;

_repository.SelectOne((SelectedEntity as Entity).Id, SelectOneForRestoreCompleted, ErrorHandler);

}

}

private void SelectOneForRestoreCompleted(TEntity result, object userData)

{

// снимем пометку на удаление у выделенной сущности

var entityType = result.GetType();

var isDeletedProperty = entityType.GetProperty("IsDeleted");

if (isDeletedProperty != null)

{

isDeletedProperty.SetValue(result, false, null);

}

// сохраним

_repository.SaveOrUpdate(result, OnRestoreEntityCompleted, OnError);

}

private void OnRestoreEntityCompleted(TEntity result, object userdata)

{

ShowLoading = false;

RefreshPageCommand.Execute(null);

}

protected void DoShowMarkDeletedEntities(object param)

{

ShowDeletedRecords = !ShowDeletedRecords;

}

public virtual void DoRefreshPage(object param)

{

ServerFilter filter = CreateFilter();

//EventAggregator.PublishEvent<GetEntityPageEvent, Guid>(ViewModelId);

SelectPage(

((CurrentPage - 1) * ClientConfig.OnPageRowCount),

ClientConfig.OnPageRowCount,

filter,

View.Sorter,

ShowDeletedRecords,

ShowNotActualRecords);

}

private void DoSelectEntity(object param)

{

EventAggregator.PublishEvent<SelectEntityEvent, Guid>(ViewModelId);

}

protected virtual void DoAddEntity(object param)

{

// Инициализация редактора сущностей

// TODO: Добавить условие - если есть права на редактирование

InitEntityEditor(string.Empty);

//EventAggregator.PublishEvent<AddEntityEvent, Guid>(ViewModelId);

var header = string.Format(LocalizedStrings.Generic_Directory_Add_Record, RefName);

//LoadDetailsData();

_vmEditor.ShowLoading = false;

_currentEditableEntity = CreateNewEntity();

ShowEditor(_currentEditableEntity, header, ViewConditions.Add);

}

protected virtual TEntity CreateNewEntity()

{

return new TEntity();

}

protected virtual void DoEditEntity(object param)

{

if (IsMarkDeletedSelectedEntity)

{

return;

}

// Инициализацияредакторасущностей

// TODO: Добавить условие - если есть права на редактирование

InitEntityEditor(string.Empty);

var e = SelectedEntity as Entity;

if (e != null)

{

LoadDetailsData(e.Id);

}

}

protected virtual void SelectOneCompleted(TEntity result, object userData)

{

OnLoadDetailsDataCompleted();

var header = string.Format(LocalizedStrings.Generic_Directory_Edit_Record, RefName);

ShowEditor(result, header, ViewConditions.Edit);

}

protected virtual string GetExistingRecordErrorMessage(TEntity entity)

{

MultiNameEntity temp = entity as MultiNameEntity;

if (temp != null)

return String.Format(LocalizedStrings.ReferenceAddError_ExistingRecord, RefName,

temp.Names.FirstOrDefault().Value);

return String.Format(LocalizedStrings.ReferenceAddError_ExistingRecord_Second, RefName);

}

protected void ErrorHandler(object userData, Exception ex)

{

_vmEditor.ShowLoading = false;

ShowLoading = false;

string error = ex.Message;

if (error.Length > 1)

//if (String.Equals(error, "ORA-01920") || String.Equals(error, "ORA-00001"))

if (error.Contains("ORA-01920"))

{

_vmEditor.BrowseError(LocalizedStrings.ErrAddUser_UserExists);

}

else if(error.Contains("ORA-00001") || error.Contains("ORA-20998"))

{

_vmEditor.BrowseError(GetExistingRecordErrorMessage(_vmEditor.EntityDetailsViewModel.Entity));

}

else

{

_vmEditor.BrowseError(error);

}

else

CloseEditor();

}

private void SaveOrUpdateCompleted(TEntity result, object userData)

{

_vmEditor.Entity = result;

_vmEditor.ShowLoading = false;

CloseEditor();

OnEntityCreated(result);

RefreshPageCommand.Execute(null);

}

protected virtual void OnEntityCreated(TEntity entity)

{

}

/// <summary>

/// Внутренний служебный класс, для передачи данных в колбэки

/// </summary>

//private class PropertyRefListInfo

//{

// public PropertyRefListInfo(string propName, Type propType)

// {

// PropertyName = propName;

// }

// /// <summary>

// /// Имя свойства, которое требует получения списка вызможных значений

// /// </summary>

// public string PropertyName { get; set; }

//}

protected virtual void DoPrintLog(object parameter)

{

}

public Dictionary<string, FrameworkElement> DictControls()

{

throw new NotImplementedException();

}

public virtual TEntity Entity { get; set; }

public void BrowseError(string errorText)

{

}

public ICommand OkCommmand { get; private set; }

public ICommand CancelCommmand { get; private set; }

public event EventHandler<EntityEventArgs<TEntity>> OkCompleted;

public event EventHandler CancelCompleted;

protected virtual void DoOkCommand(object parameter)

{

if (OkCompleted != null)

OkCompleted(this, new EntityEventArgs<TEntity>(Entity));

}

protected virtual void DoCancelCommand(object parameter)

{

if (CancelCompleted != null)

CancelCompleted(this, new EventArgs());

}

}

{

public class ImportTypeInstanceViewModel : BaseDetailsViewModel<ImportLog>, IParentable<NodeWrapper>

{

private ObservableCollection<ImportStatus> _importStatuses;

public ObservableCollection<ImportStatus> ImportStatuses

{

get { return _importStatuses; }

set

{

_importStatuses = value;

OnPropertyChanged("ImportStatuses");

}

}

public override Visibility EditEntityVisibility

{

get

{

return Visibility.Collapsed;

}

}

public Visibility StartImportVisibility

{

get

{

if (ParentEntity.ImportStatus.Code == "New")

return Visibility.Visible;

return Visibility.Collapsed;

}

}

public override Visibility AddEntityVisibility

{

get

{

if (ParentEntity.ImportStatus.Code == "New")

return Visibility.Visible;

return Visibility.Collapsed;

}

}

public Visibility ReplayVisibility

{

get

{

if (ParentEntity.ImportStatus.Code == "Error")

return Visibility.Visible;

return Visibility.Collapsed;

}

}

public override Visibility SearchVisibility

{

get

{

return Visibility.Collapsed;

}

}

private ImportLog _importLog;

public ImportLog ImportLog

{

get { return _importLog; }

set

{

if (_importLog != value)

{

_importLog = value;

OnPropertyChanged("ImportLog");

}

}

}

public ICommand StartImportCommand { get; private set; }

public ICommand ReplayImportCommand { get; private set; }

public DataImportDetailsViewModel DataImportDetailsViewModel { get; set; }

public ImportTypeInstanceViewModel(EntityListView view, IUnityContainer container)

: base(view, container)

{

this.View.Toolbar.CustomizeToolbar(new ImportActionsToolbarBuilder().Buttons);

StartImportCommand = new DelegateCommand<object>(DoStartImport);

ReplayImportCommand = new DelegateCommand<object>(DoReplayImport);

DataImportDetailsViewModel = InnerContainer.Resolve<DataImportDetailsViewModel>();

RowDetailsElement infoImportElement = new RowDetailsElement(typeof(DataImportDetailsViewModel), "Дополнительно");

Elements.Add(infoImportElement);

}

public override void GridView_RowDetailsVisibilityChanged(object sender, Telerik.Windows.Controls.GridView.GridViewRowDetailsEventArgs e)

{

if (e.Visibility == Visibility.Visible)

{

BaseDetailsElementsControl elementsControl =

GetChildControl<BaseDetailsElementsControl>(e.DetailsElement);

elementsControl.ICItems.Items.Clear();

foreach (RowDetailsElement element in Elements)

{

DataImportDetailsViewModel = InnerContainer.Resolve<DataImportDetailsViewModel>();

DataImportDetailsViewModel.ImportLog = _importLog;

if (DataImportDetailsViewModel is IParentable<ImportLog>)

{

IParentable<ImportLog> vm = DataImportDetailsViewModel as IParentable<ImportLog>;

vm.ParentEntity = e.Row.DataContext as ImportLog;

}

if (DataImportDetailsViewModel is IBaseDetailsParametersViewModel)

{

IBaseDetailsParametersViewModel vm = DataImportDetailsViewModel as IBaseDetailsParametersViewModel;

vm.RowDetailsFilterParameters = element.RowDetailsFilterParameters;

}

object modelView = element.ModelType.GetProperty("View").GetValue(DataImportDetailsViewModel, null);

BaseDetailsElementControl elementControl = new BaseDetailsElementControl();

elementControl.HeaderText = element.HeaderText;

elementControl.ICGrid.Items.Add(modelView);

elementsControl.ICItems.Items.Add(elementControl);

element.ModelType.InvokeMember("Show", BindingFlags.InvokeMethod, null, DataImportDetailsViewModel, null);

}

}

}

protected override void SelectionEntityChanged()

{

if (SelectedEntity != null)

{

ImportLog = SelectedEntity;

}

}

protected override void OnModelLoaded()

{

InitializeDataSource();

}

public void InitializeDataSource()

{

StartRequest();

new CommonEntityRepository<ImportStatus>().SelectAll(OnSelectedStatusesCompleted, OnError);

}

private void OnSelectedStatusesCompleted(ObservableCollection<ImportStatus> statuses, object userData)

{

ImportStatuses = statuses;

EndRequest();

}

private NodeWrapper _parentEntity;

public NodeWrapper ParentEntity

{

get { return _parentEntity; }

set

{

if (_parentEntity != value)

{

_parentEntity = value;

OnPropertyChanged("ParentEntity");

DoRefreshPage(null);

}

}

}

private void DoStartImport(object param)

{

if (SelectedEntity == null)

return;

SelectedEntity.ImportDate = DateTime.Now;

SelectedEntity.ImportStatusId = ImportStatuses.Where(impst => impst.Code.Equals("In-line")).FirstOrDefault();

StartRequest();

new CommonEntityRepository<ImportLog>().SaveOrUpdate(SelectedEntity, OnSaveLogCompleted, OnError);

}

private void OnSaveLogCompleted(ImportLog entity, object userdata)

{

EndRequest();

DoRefreshPage(null);

}

private void DoReplayImport(object param)

{

if (SelectedEntity == null)

return;

SelectedEntity.ImportDate = DateTime.Now;

SelectedEntity.ImportStatusId = ImportStatuses.Where(impst => impst.Code.Equals("In-line")).FirstOrDefault();

StartRequest();

new CommonEntityRepository<ImportLog>().SaveOrUpdate(SelectedEntity, OnSaveLogCompleted, OnError);

}

protected override void DoAddEntity(object param)

{

var dialogFilter = string.Format("{0} файлы (*.{0})| *.{0}",

ParentEntity.ImportType.Extension);

OpenFileDialog openFile = new OpenFileDialog();

openFile.Multiselect = false;

openFile.Filter = dialogFilter;

openFile.ShowDialog();

if (openFile.File != null)

{

ServerSorter sorter = new ServerSorter();

sorter.Values = new List<ServerSorterEntry>();

sorter.Add(new ServerSorterEntry(Attachment.PropertyNames.Id, ServerSorterState.Desc,

"Id"));

DefaultServerFilter nameFilter = new DefaultServerFilter();

nameFilter.AddValueFilter("Name", ConditionOperator.Equal, openFile.File.Name);

StartRequest();

new CommonEntityRepository<Attachment>().SelectAll(nameFilter, sorter, OnCheckAttachmentNameCompleted, OnError, openFile.File);

}

}

private void OnSaveImportLogCompleted(ImportLog result, object userdata)

{

EndRequest();

if (userdata != null)

{

var file = userdata as FileInfo;

if (file != null)

{

var attachmentRepository = InnerContainer.Resolve<BaseRepository<Attachment>>();

Attachment attachment = new Attachment();

attachment.Name = file.Name;

attachment.AttachmentLink = result.AttachmentLink;

StartRequest();

attachmentRepository.SaveOrUpdate(attachment, OnAttachmentLinkSave, OnError, file.OpenRead());

}

}

}

private void OnCheckAttachmentNameCompleted(ObservableCollection<Attachment> result, object userdata)

{

EndRequest();

if (result.Count != 0)

{

if (userdata != null)

{


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.