using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using ChatworkBulkSender.Daos;
using ChatworkBulkSender.Dtos;
using ChatworkBulkSender.UserControls;
using ChatworkBulkSender.Utils;
namespace ChatworkBulkSender.Forms
{
public partial class M_SendPatternIndividualEdit : Form, ICreatable<PatternMasterDto>, IUpdateble<PatternMasterDto>
{
public enum ButtonMode
{
Register, // 新規登録
Update // 更新
,
}
private List<int> _selectedCustomerIds = null;
// パターン名称ヘッダー
private PatternNameHeaderControl _patternNameHeader = null;
private SendContentControl _sendPatternIndividualEdit = null;
// 送信パターンマスタ編集部分
private SendContentControl _sendContent = null;
private BtnRegisterControl _btnRegister = null;
private BtnUpdateControl _btnUpdate = null;
// 初期値は、新規登録
private ButtonMode _btnMode = ButtonMode.Register;
public event EventHandler<PatternMasterDto> DataCreated;
public event EventHandler<PatternMasterDto> DataUpdated;
public ButtonMode BtnMode
{
set
{
_btnMode = value;
}
}
public M_SendPatternIndividualEdit(ButtonMode buttonMode = ButtonMode.Register, PatternMasterDto sendPattern = null)
{
InitializeComponent();
this._btnMode = buttonMode;
// 初期のウィンドウサイズ
this.ClientSize = new Size(1600,900);
// ウィンドウサイズの固定
this.FormBorderStyle = FormBorderStyle.FixedSingle;
// 初期のウィンドウ表示位置
this.StartPosition = FormStartPosition.CenterScreen;
_patternNameHeader = new PatternNameHeaderControl();
_sendContent = new SendContentControl();
if (_btnMode == ButtonMode.Update)
{
_btnUpdate = new BtnUpdateControl();
_btnUpdate.Dock = DockStyle.Fill;
panel3.Controls.Add(_btnUpdate);
}
else
{
_btnRegister = new BtnRegisterControl();
_btnRegister.Dock = DockStyle.Fill;
panel3.Controls.Add(_btnRegister);
}
// レイアウトを垂直に設定
_sendContent.LayoutMode = LayoutMode.Vertical;
// Dock設定
_sendContent.Dock = DockStyle.Fill;
_patternNameHeader.Dock = DockStyle.Fill;
// パネルに追加、表示する
panel1.Controls.Add(_patternNameHeader);
panel2.Controls.Add(_sendContent);
Label label1 = _sendContent.Controls.Find("label1",false).FirstOrDefault() as Label;
label1.Width = 170;
label1.Text += "(定型文)";
}
private void M_SenderPatternIndividualEdit_Load(object sender, EventArgs e)
{
this.ActiveControl = panel1;
if (_btnMode == ButtonMode.Update)
{
_btnUpdate.BtnReturnClicked += BtnReturn_Click;
}
else
{
_btnRegister.BtnReturnClicked += BtnReturn_Click;
}
}
/// <summary>
/// フォームに表示するユーザーコントロールをパネルから削除した後、明示的なDisposeで解放する。
/// </summary>
private void DisposeViewControls()
{
// パネルから削除する
panel1.Controls.Clear();
panel2.Controls.Clear();
panel3.Controls.Clear();
// 削除だけでは解放されないので、明示的に解放する
_patternNameHeader.Dispose();
_sendContent.Dispose();
if (_btnMode == ButtonMode.Update)
{
_btnUpdate.Dispose();
}
else
{
_btnRegister.Dispose();
}
}
private void BtnRegister_Click(object sender, EventArgs e)
{
try
{
if (_selectedCustomerIds != null)
{
_selectedCustomerIds.Clear();
}
else
{
_selectedCustomerIds = new List<int>();
}
var newPattern = GetPatternData();
if (newPattern == null) { return; }
var dao = new PatternMasterDao();
var createdId = dao.InsertWithCustomersBatch(newPattern,_selectedCustomerIds);
if (createdId == 1)
{
DataCreated?.Invoke(this, newPattern);
}
}
catch (Exception ex)
{
MessageBoxUtil.ShowErr($"{ex.Message}\n\n");
}
}
private void BtnReturn_Click(object sender, EventArgs e)
{
this.Close();
}
private void M_SendPatternIndividualEdit_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("送信パターンマスタ 個別編集画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
e.Cancel = true;
return;
}
// イベント登録の解除
if (_btnMode == ButtonMode.Update)
{
_btnUpdate.BtnReturnClicked -= BtnReturn_Click;
}
else
{
_btnRegister.BtnReturnClicked -= BtnReturn_Click;
}
// 明示的に解放する
this.DisposeViewControls();
// 設定メニューを表示する
this.Owner.Show();
// 再描写を行う
this.Owner.Refresh();
}
private PatternMasterDto GetPatternData()
{
var patternName =_patternNameHeader.Controls.Find("txtPatternName",false).FirstOrDefault() as TextBox;
var templateTxt = _sendContent.Controls.Find("txtContents", true).FirstOrDefault() as TextBox;
var sortOrder = _patternNameHeader.Controls.Find("txtSortOrder", false).FirstOrDefault() as TextBox;
var isUnused = _patternNameHeader.Controls.Find("chkUnusedFlg", false).FirstOrDefault() as CheckBox;
var dgvDestinationList = _sendContent.Controls.Find("dgvDestinationList", true).FirstOrDefault() as DataGridView;
var rdoAutomatic = _sendContent.Controls.Find("rdoAutomaticSelection",true).FirstOrDefault() as RadioButton;
if (dgvDestinationList != null)
{
foreach (DataGridViewRow row in dgvDestinationList.Rows)
{
if (row.Cells["送信対象"].Value != null && (bool)row.Cells["送信対象"].Value)
{
_selectedCustomerIds.Add(Convert.ToInt32(row.Cells["管理番号"].Value));
}
}
}
var newPattern = new PatternMasterDto
{
PatternName = patternName.Text,
TemplateText = templateTxt.Text,
SortOrder = int.Parse(sortOrder.Text),
IsUnused = isUnused.Checked,
};
return newPattern;
}
}
}