using EasyBL.WebApi.Message;
using Entity.Sugar;
using SqlSugar;
using SqlSugar.Base;
using System;

namespace EasyBL.WEBAPP.EIP
{
    public class EipComService : ServiceBase
    {
        #region 通過帳單號碼抓去專案代號

        /// <summary>
        /// 通過帳單號碼抓去專案代號
        /// </summary>
        /// <param name="i_crm"></param>
        /// <returns></returns>
        public ResponseMessage GetPrjCodeByBillNO(RequestMessage i_crm)
        {
            ResponseMessage rm = null;
            string sMsg = null;
            var db = SugarBase.DB;
            try
            {
                do
                {
                    var sBillNO = _fetchString(i_crm, @"BillNO");
                    var oBillInfo = db.Queryable<OTB_OPM_BillInfo, OTB_OPM_Exhibition>((t1, t2) => t1.OrgID == t2.OrgID && t1.ExhibitionNO == t2.SN.ToString())
                        .Where((t1, t2) => t1.OrgID == i_crm.ORIGID && t1.BillNO == sBillNO)
                        .Select((t1, t2) => new { t1.BillNO, PrjCode = t2.ExhibitionCode }).Single();

                    rm = new SuccessResponseMessage(null, i_crm);
                    rm.DATA.Add(BLWording.REL, oBillInfo);
                } while (false);
            }
            catch (Exception ex)
            {
                sMsg = Util.GetLastExceptionMsg(ex);
                LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(EipComService), @"EIPCOMMON", @"GetPrjCodeByBillNO(通過帳單號碼抓去專案代號)", @"", @"", @"");
            }
            finally
            {
                if (null != sMsg)
                {
                    rm = new ErrorResponseMessage(sMsg, i_crm);
                }
            }
            return rm;
        }

        #endregion 通過帳單號碼抓去專案代號

        #region 抓去個人主頁請假資訊

        /// <summary>
        /// 抓去個人主頁請假資訊
        /// </summary>
        /// <param name="i_crm"></param>
        /// <returns></returns>
        public ResponseMessage GetLeavelist(RequestMessage i_crm)
        {
            ResponseMessage rm = null;
            string sMsg = null;
            var db = SugarBase.DB;
            try
            {
                do
                {
                    var rTomorrow = DateTime.Now.AddDays(2);
                    var saLeave = db.Queryable<OTB_EIP_Leave, OTB_SYS_Members>((a, b) =>
                    new object[] {
                          JoinType.Inner,a.OrgID==b.OrgID && a.AskTheDummy==b.MemberID
                    }).OrderBy(a => a.StartDate)
                        .Where((a, b) => a.OrgID == i_crm.ORIGID && a.EndDate.Value >= DateTime.Now.Date && a.StartDate.Value <= rTomorrow.Date)
                        .Where((a, b) => @"B,H-O,E".Contains(a.Status))
                        .Select((a, b) => new { Info = a, AskTheDummyName = b.MemberName, b.MemberPic, b.OrgID }).ToList();

                    rm = new SuccessResponseMessage(null, i_crm);
                    rm.DATA.Add(BLWording.REL, saLeave);
                } while (false);
            }
            catch (Exception ex)
            {
                sMsg = Util.GetLastExceptionMsg(ex);
                LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(EipComService), @"EIPCOMMON", @"GetLeavelist(抓去個人主頁請假資訊)", @"", @"", @"");
            }
            finally
            {
                if (null != sMsg)
                {
                    rm = new ErrorResponseMessage(sMsg, i_crm);
                }
            }
            return rm;
        }

        #endregion 抓去個人主頁請假資訊

        #region 獲取簽核流程

        /// <summary>
        /// 獲取簽核流程
        /// </summary>
        /// <param name="i_crm">todo: describe i_crm parameter on GetFlows</param>
        /// <returns></returns>
        public ResponseMessage GetFlows(RequestMessage i_crm)
        {
            ResponseMessage rm = null;
            string sMsg = null;
            var db = SugarBase.GetIntance();
            try
            {
                do
                {
                    var sFlow_Type = _fetchString(i_crm, @"Flow_Type");
                    var sShareTo = _fetchString(i_crm, @"ShareTo");
                    var saCheckFlow = db.Queryable<OTB_EIP_CheckFlow>()
                          .OrderBy(x => x.ModifyDate)
                          .Where(x => x.OrgID == i_crm.ORIGID)
                          .WhereIF(!string.IsNullOrEmpty(sFlow_Type), x => x.Flow_Type == sFlow_Type)
                          .WhereIF(!string.IsNullOrEmpty(sShareTo), x => x.ShareTo.Contains(sShareTo))
                          .Select(x => new
                          {
                              x.Guid,
                              x.Flow_Name,
                              x.Flows
                          })
                          .ToList();
                    rm = new SuccessResponseMessage(null, i_crm);
                    rm.DATA.Add(BLWording.REL, saCheckFlow);
                } while (false);
            }
            catch (Exception ex)
            {
                sMsg = Util.GetLastExceptionMsg(ex);
                LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(EipComService), @"EIPCOMMON", @"GetFlows(獲取簽核流程)", @"", @"", @"");
            }
            finally
            {
                if (null != sMsg)
                {
                    rm = new ErrorResponseMessage(sMsg, i_crm);
                }
            }
            return rm;
        }

        #endregion 獲取簽核流程
    }
}