using System;
using System.Collections.Generic;
using DfExample.DBFlute.AllCommon.CBean;
using DfExample.DBFlute.AllCommon.CBean.COption;
using DfExample.DBFlute.CBean;
using DfExample.DBFlute.ExBhv;
using DfExample.DBFlute.ExEntity;
using DfExampleBiz.Facade.Member.Condition;
using DfExampleBiz.Facade.Member.Dto;
using Seasar.Quill.Attrs;
namespace DfExampleBiz.Facade.Member
{
[Implementation]
public class MemberFacade
{
///
/// メンバーBhv
///
protected MemberBhv memberBhv;
///
/// メンバーステータスBhv
///
protected MemberStatusBhv memberStatusBhv;
///
/// メンバー一覧を取得する
///
/// 画面から設定する検索項目
/// メンバー一覧
public MemberDtoList GetMemberList(MemberCondition memberCB)
{
//ConditionBeanに検索条件詰め替え
MemberCB cb = new MemberCB();
cb.SetupSelect_MemberStatus();
cb.Query().SetMemberName_PrefixSearch(memberCB.MemberName);
cb.Query().SetMemberStatusCode_Equal(memberCB.MemberStatusCd);
//未払いが有る人を検索するとき条件追加
if(memberCB.HasUnPaid)
{
cb.Query().ExistsPurchaseList(delegate(PurchaseCB subCB)
{
subCB.Query().SetPaymentCompleteFlg_Equal_False();
});
}
//商品を買ったことがあるか?
if (!string.IsNullOrEmpty(memberCB.PurchaseItemName))
{
cb.Query().ExistsPurchaseList(delegate(PurchaseCB subCB)
{
subCB.SetupSelect_Product();
subCB.Query().ConditionQueryProduct.SetProductName_PrefixSearch(memberCB.PurchaseItemName);
});
}
cb.Query().SetFormalizedDatetime_FromTo(memberCB.FormalizedDatetimeFrom, memberCB.FormalizedDatetimeTo, new FromToOption().CompareAsDate());
//ページ設定
cb.Paging(memberCB.PageSize,memberCB.PageNumber);
//TODO ソートを画面に実装するときは考える
//とりあえず更新日降順でソート設定
cb.Query().AddOrderBy_UpdateDatetime_Desc();
MemberDtoList list = new MemberDtoList();
list.MemberList = new List();
PagingResultBean page = memberBhv.SelectPage(cb);
list.AllRecordCount = page.AllPageCount;
foreach (var member in page)
{
MemberDto dto = new MemberDto();
dto.MemberId = member.MemberId.ToString();
dto.MemberName = member.MemberName;
dto.MemberStatus = member.MemberStatus.MemberStatusName;
dto.FormalizedDatetime = member.FormalizedDatetime.ToString();
dto.UpdateDatetime = member.UpdateDatetime.ToString();
dto.VersionNo = member.VersionNo;
list.MemberList.Add(dto);
}
return list;
}
///
/// メンバーステータス一覧取得
///
/// メンバーステータス一覧
public IList> GetMemberStatusList()
{
MemberStatusCB cb = new MemberStatusCB();
cb.Query().AddOrderBy_DisplayOrder_Asc();
ListResultBean list = memberStatusBhv.SelectList(cb);
IList> pairList = new List>();
foreach (var memberStatus in list)
{
pairList.Add(new KeyValuePair(memberStatus.MemberStatusCode, memberStatus.MemberStatusName)); ;
}
return pairList;
}
//編集画面で使用
public MemberDto GetMember(long memberId)
{
MemberCB cb = new MemberCB();
cb.SetupSelect_MemberStatus();
cb.Specify().DerivedMemberLoginList().Max(delegate(MemberLoginCB subCB)
{
subCB.Specify().ColumnLoginDatetime();
},"LATEST_LOGIN_DATETIME");
//cb.SetupSelect_MemberLoginAsLatest();
cb.Query().SetMemberId_Equal(memberId);
DfExample.DBFlute.ExEntity.Member entity = memberBhv.SelectEntityWithDeletedCheck(cb);
MemberDto dto = new MemberDto();
dto.MemberId = entity.MemberId.ToString();
dto.MemberName = entity.MemberName;
dto.MemberAccount = entity.MemberAccount;
dto.MemberStatusCode = entity.MemberStatusCode;
dto.Birthdate = String.Format("{0:yyyy/MM/dd}",entity.Birthdate);
dto.FormalizedDatetime = entity.FormalizedDatetime.ToString();
dto.UpdateDatetime = entity.UpdateDatetime.ToString();
dto.LatestLoginDatetime = entity.LatestLoginDatetime != null ? entity.LatestLoginDatetime.ToString() : "";
return dto;
}
[Transaction]
public virtual void Update(MemberDto dto)
{
MemberCB cb = new MemberCB();
cb.Query().SetMemberId_Equal(long.Parse(dto.MemberId));
DfExample.DBFlute.ExEntity.Member member = memberBhv.SelectEntityWithDeletedCheck(cb);
member.MemberAccount = dto.MemberAccount;
member.MemberName = dto.MemberName;
member.VersionNo = dto.VersionNo;
if (!string.IsNullOrEmpty(dto.Birthdate))
{
member.Birthdate = DateTime.Parse(dto.Birthdate);
}
memberBhv.Update(member);
}
}
}