Esempio n. 1
0
        //取得特定專案工地費用每月執行總和
        public List <ExpensetFromOPByMonth> getSiteExpensetOfMonth(string projectid, int targetYear, int targetMonth, bool isCum)
        {
            List <ExpensetFromOPByMonth> lstExpense = new List <ExpensetFromOPByMonth>();

            using (var context = new topmepEntities())
            {
                if (isCum == true)
                {
                    lstExpense = context.Database.SqlQuery <ExpensetFromOPByMonth>("SELECT SUM(F.JAN) AS JAN, SUM(F.FEB) AS FEB, SUM(F.MAR) AS MAR, SUM(F.APR) AS APR, SUM(F.MAY) AS MAY, SUM(F.JUN) AS JUN, " +
                                                                                   "SUM(F.JUL) AS JUL, SUM(F.AUG) AS AUG, SUM(F.SEP) AS SEP, SUM(F.OCT) AS OCT, SUM(F.NOV) AS NOV, SUM(F.DEC) AS DEC, SUM(F.HTOTAL) AS HTOTAL FROM(SELECT C.*, E.HTOTAL " +
                                                                                   "FROM(SELECT SUBJECT_NAME, FIN_SUBJECT_ID, [01] As 'JAN', [02] As 'FEB', [03] As 'MAR', [04] As 'APR', [05] As 'MAY', [06] As 'JUN', [07] As 'JUL', [08] As 'AUG', [09] As 'SEP', [10] As 'OCT', [11] As 'NOV', [12] As 'DEC' " +
                                                                                   "FROM(SELECT B.OCCURRED_MONTH, fs.FIN_SUBJECT_ID, fs.SUBJECT_NAME, B.AMOUNT FROM FIN_SUBJECT fs LEFT JOIN(SELECT ef.OCCURRED_MONTH, ei.FIN_SUBJECT_ID, ei.AMOUNT FROM FIN_EXPENSE_ITEM ei " +
                                                                                   "LEFT JOIN FIN_EXPENSE_FORM ef ON ei.EXP_FORM_ID = ef.EXP_FORM_ID WHERE ef.PROJECT_ID = @projectid AND ef.OCCURRED_YEAR = @targetYear AND ef.OCCURRED_MONTH <= @targetMonth)B " +
                                                                                   "ON fs.FIN_SUBJECT_ID = B.FIN_SUBJECT_ID WHERE fs.CATEGORY = '工地費用') As STable " +
                                                                                   "PIVOT(SUM(AMOUNT) FOR OCCURRED_MONTH IN([01], [02], [03], [04], [05], [06], [07], [08], [09], [10], [11], [12])) As PTable)C LEFT JOIN(SELECT FIN_SUBJECT_ID, ISNULL(SUM(fei.AMOUNT), 0) AS HTOTAL " +
                                                                                   "FROM FIN_EXPENSE_ITEM fei LEFT JOIN FIN_EXPENSE_FORM fef ON fei.EXP_FORM_ID = fef.EXP_FORM_ID WHERE fef.PROJECT_ID = @projectid AND fef.OCCURRED_YEAR < @targetYear OR " +
                                                                                   "fef.PROJECT_ID = @projectid AND fef.OCCURRED_YEAR = @targetYear AND fef.OCCURRED_MONTH <= @targetMonth GROUP BY FIN_SUBJECT_ID)E ON C.FIN_SUBJECT_ID = E.FIN_SUBJECT_ID)F; "
                                                                                   , new SqlParameter("projectid", projectid), new SqlParameter("targetYear", targetYear), new SqlParameter("targetMonth", targetMonth)).ToList();
                }
                else
                {
                    lstExpense = context.Database.SqlQuery <ExpensetFromOPByMonth>("SELECT SUM(F.JAN) AS JAN, SUM(F.FEB) AS FEB, SUM(F.MAR) AS MAR, SUM(F.APR) AS APR, SUM(F.MAY) AS MAY, SUM(F.JUN) AS JUN, " +
                                                                                   "SUM(F.JUL) AS JUL, SUM(F.AUG) AS AUG, SUM(F.SEP) AS SEP, SUM(F.OCT) AS OCT, SUM(F.NOV) AS NOV, SUM(F.DEC) AS DEC, SUM(F.HTOTAL) AS HTOTAL FROM(SELECT  C.*, " +
                                                                                   "SUM(ISNULL(C.JAN, 0)) + SUM(ISNULL(C.FEB, 0)) + SUM(ISNULL(C.MAR, 0)) + SUM(ISNULL(C.APR, 0)) + SUM(ISNULL(C.MAY, 0)) + SUM(ISNULL(C.JUN, 0)) " +
                                                                                   "+ SUM(ISNULL(C.JUL, 0)) + SUM(ISNULL(C.AUG, 0)) + SUM(ISNULL(C.SEP, 0)) + SUM(ISNULL(C.OCT, 0)) + SUM(ISNULL(C.NOV, 0)) + SUM(ISNULL(C.DEC, 0)) AS HTOTAL " +
                                                                                   "FROM(SELECT SUBJECT_NAME, FIN_SUBJECT_ID, [01] As 'JAN', [02] As 'FEB', [03] As 'MAR', [04] As 'APR', [05] As 'MAY', [06] As 'JUN', [07] As 'JUL', [08] As 'AUG', [09] As 'SEP', [10] As 'OCT', [11] As 'NOV', [12] As 'DEC' " +
                                                                                   "FROM(SELECT B.OCCURRED_MONTH, fs.FIN_SUBJECT_ID, fs.SUBJECT_NAME, B.AMOUNT FROM FIN_SUBJECT fs LEFT JOIN(SELECT ef.OCCURRED_MONTH, ei.FIN_SUBJECT_ID, ei.AMOUNT FROM FIN_EXPENSE_ITEM ei " +
                                                                                   "LEFT JOIN FIN_EXPENSE_FORM ef ON ei.EXP_FORM_ID = ef.EXP_FORM_ID WHERE ef.PROJECT_ID = @projectid AND ef.OCCURRED_YEAR = @targetYear)B " +
                                                                                   "ON fs.FIN_SUBJECT_ID = B.FIN_SUBJECT_ID WHERE fs.CATEGORY = '工地費用') As STable " +
                                                                                   "PIVOT(SUM(AMOUNT) FOR OCCURRED_MONTH IN([01], [02], [03], [04], [05], [06], [07], [08], [09], [10], [11], [12])) As PTable)C " +
                                                                                   "GROUP BY C.SUBJECT_NAME, C.FIN_SUBJECT_ID, C.JAN, C.FEB, C.MAR, C.APR, C.MAY, C.JUN, C.JUL, C.AUG, C.SEP, C.OCT, C.NOV, C.DEC)F ; "
                                                                                   , new SqlParameter("projectid", projectid), new SqlParameter("targetYear", targetYear)).ToList();
                }
            }
            return(lstExpense);
        }
        //更新異動單資料
        public string updateChangeOrder(PLAN_COSTCHANGE_FORM form, List <PLAN_COSTCHANGE_ITEM> lstItem)
        {
            int    i       = 0;
            string sqlForm = @"UPDATE PLAN_COSTCHANGE_FORM SET REASON_CODE=@Reasoncode,METHOD_CODE=@methodCode,
                            REMARK_ITEM=@RemarkItem,REMARK_QTY=Null,REMARK_PRICE=Null,REMARK_OTHER=Null,
                            MODIFY_USER_ID=@userId,MODIFY_DATE=@modifyDate WHERE FORM_ID=@formId;";
            string sqlItem = @"UPDATE PLAN_COSTCHANGE_ITEM SET ITEM_DESC=@itemdesc,ITEM_UNIT=@unit,ITEM_UNIT_PRICE=@unitPrice,ITEM_UNIT_COST=@unitCost,
                              ITEM_QUANTITY=@Qty,ITEM_REMARK=@remark,TRANSFLAG=@transFlag,MODIFY_USER_ID=@userId,MODIFY_DATE=@modifyDate 
                              WHERE ITEM_UID=@uid";

            //2.將資料寫入

            using (var context = new topmepEntities())
            {
                try
                {
                    //更新表頭
                    context.Database.BeginTransaction();
                    var parameters = new List <SqlParameter>();
                    parameters.Add(new SqlParameter("Reasoncode", form.REASON_CODE));
                    parameters.Add(new SqlParameter("methodCode", form.METHOD_CODE));
                    parameters.Add(new SqlParameter("RemarkItem", form.REMARK_ITEM));
                    // parameters.Add(new SqlParameter("RemarkQty", form.REMARK_QTY));
                    // parameters.Add(new SqlParameter("RemarkPrice", form.REMARK_PRICE));
                    // parameters.Add(new SqlParameter("RemarkOther", form.REMARK_OTHER));
                    parameters.Add(new SqlParameter("userId", form.MODIFY_USER_ID));
                    parameters.Add(new SqlParameter("modifyDate", form.MODIFY_DATE));
                    parameters.Add(new SqlParameter("formId", form.FORM_ID));
                    i = context.Database.ExecuteSqlCommand(sqlForm, parameters.ToArray());
                    logger.Debug("create COSTCHANGE_FORM:" + sqlForm);
                    foreach (PLAN_COSTCHANGE_ITEM item in lstItem)
                    {
                        parameters = new List <SqlParameter>();
                        parameters.Add(new SqlParameter("itemdesc", item.ITEM_DESC));
                        parameters.Add(new SqlParameter("unit", item.ITEM_UNIT));
                        if (item.ITEM_UNIT_PRICE != null)
                        {
                            parameters.Add(new SqlParameter("unitPrice", item.ITEM_UNIT_PRICE));
                        }
                        else
                        {
                            parameters.Add(new SqlParameter("unitPrice", DBNull.Value));
                        }
                        if (item.ITEM_UNIT_COST != null)
                        {
                            parameters.Add(new SqlParameter("unitCost", item.ITEM_UNIT_COST));
                        }
                        else
                        {
                            parameters.Add(new SqlParameter("unitCost", DBNull.Value));
                        }
                        if (item.ITEM_QUANTITY == null)
                        {
                            parameters.Add(new SqlParameter("Qty", DBNull.Value));
                        }
                        else
                        {
                            parameters.Add(new SqlParameter("Qty", item.ITEM_QUANTITY));
                        }
                        parameters.Add(new SqlParameter("transFlag", item.TRANSFLAG));
                        parameters.Add(new SqlParameter("remark", item.ITEM_REMARK));
                        parameters.Add(new SqlParameter("userId", form.MODIFY_USER_ID));
                        parameters.Add(new SqlParameter("modifyDate", form.MODIFY_DATE));
                        parameters.Add(new SqlParameter("uid", item.ITEM_UID));
                        i = i + context.Database.ExecuteSqlCommand(sqlItem, parameters.ToArray());
                    }
                    context.Database.CurrentTransaction.Commit();
                }
                catch (Exception ex)
                {
                    context.Database.CurrentTransaction.Rollback();
                    logger.Error(ex.Message + ":" + ex.StackTrace);
                    return("資料更新失敗!!(" + ex.Message + ")");
                }
            }

            return("資料更新成功(" + i + ")!");
        }
Esempio n. 3
0
        /// <summary>
        /// 建立代付款資料
        /// </summary>
        private static void modifyEstimationHold(PLAN_ESTIMATION_FORM form, List <PLAN_ESTIMATION_HOLDPAYMENT> lstHoldPayment, topmepEntities context)
        {
            //1.delete exist data
            string sql        = "DELETE PLAN_ESTIMATION_HOLDPAYMENT WHERE EST_FORM_ID=@formId";
            var    parameters = new List <SqlParameter>();

            parameters.Add(new SqlParameter("formId", form.EST_FORM_ID));
            context.Database.ExecuteSqlCommand(sql, parameters.ToArray());
            logger.Debug("sql=" + sql + ",formId=" + form.EST_FORM_ID);

            //2.建立代付款資料
            if (lstHoldPayment != null && lstHoldPayment.Count > 0)
            {
                foreach (PLAN_ESTIMATION_HOLDPAYMENT hold in lstHoldPayment)
                {
                    hold.EST_FORM_ID = form.EST_FORM_ID;
                    context.PLAN_ESTIMATION_HOLDPAYMENT.Add(hold);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 建立代付扣回資料
        /// </summary>
        private static void modifyEstimationTransfer(PLAN_ESTIMATION_FORM form, List <PLAN_ESTIMATION_PAYMENT_TRANSFER> listTransferPayment, topmepEntities context)
        {
            string sql        = "DELETE PLAN_ESTIMATION_PAYMENT_TRANSFER WHERE PAYMENT_FORM_ID=@formId";
            var    parameters = new List <SqlParameter>();

            parameters.Add(new SqlParameter("formId", form.EST_FORM_ID));
            context.Database.ExecuteSqlCommand(sql, parameters.ToArray());
            logger.Debug("sql=" + sql + ",formId=" + form.EST_FORM_ID);

            if (null != listTransferPayment && listTransferPayment.Count > 0)
            {
                foreach (PLAN_ESTIMATION_PAYMENT_TRANSFER trans in listTransferPayment)
                {
                    trans.PAYMENT_FORM_ID = form.EST_FORM_ID;
                    context.PLAN_ESTIMATION_PAYMENT_TRANSFER.Add(trans);
                }
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 建立發票資料
        /// </summary>
        public static void modifyEstimationInvoice(PLAN_ESTIMATION_FORM form, List <PLAN_ESTIMATION_INVOICE> lstInvoice, topmepEntities context)
        {
            string sql = "DELETE PLAN_ESTIMATION_INVOICE WHERE EST_FORM_ID=@formId";

            logger.Debug("remove estimation invoice:sql=" + sql + ",formId=" + form.EST_FORM_ID);
            var parameters = new List <SqlParameter>();

            parameters.Add(new SqlParameter("formId", form.EST_FORM_ID));
            context.Database.ExecuteSqlCommand(sql, parameters.ToArray());
            logger.Debug("sql=" + sql + ",formId=" + form.EST_FORM_ID);

            if (null != lstInvoice && lstInvoice.Count > 0)
            {
                foreach (PLAN_ESTIMATION_INVOICE inv in lstInvoice)
                {
                    inv.EST_FORM_ID = form.EST_FORM_ID;
                    context.PLAN_ESTIMATION_INVOICE.Add(inv);
                }
            }
        }
Esempio n. 6
0
        /// <summary>
        /// 建立估驗單與對應的明細資料
        /// </summary>
        public void createEstimationOrder(PLAN_ESTIMATION_FORM form,
                                          List <PLAN_ESTIMATION_HOLDPAYMENT> lstHoldPayment,
                                          List <PLAN_ESTIMATION_PAYMENT_TRANSFER> listTransferPayment,
                                          List <PLAN_ESTIMATION_INVOICE> listInvoice,
                                          string prid_s, string prid_e)
        {
            SerialKeyService snoservice = new SerialKeyService();

            form.EST_FORM_ID = snoservice.getSerialKey(sno_key);
            var parameters = new List <SqlParameter>();

            parameters.Add(new SqlParameter("projectId", form.PROJECT_ID));
            parameters.Add(new SqlParameter("contractId", form.CONTRACT_ID));
            //parameters.Add(new SqlParameter("EST_FORM_ID", form.EST_FORM_ID));
            parameters.Add(new SqlParameter("prid_s", prid_s));
            parameters.Add(new SqlParameter("prid_e", prid_e));

            StringBuilder sb = new StringBuilder(sql4Est);

            using (var context = new topmepEntities())
            {
                //1,建立主檔
                context.PLAN_ESTIMATION_FORM.Add(form);
                //2.建立驗收單關聯
                string sql4ReceiveOrder = @"
INSERT INTO PLAN_ESTIMATION2PURCHASE
select DISTINCT esOrder.PR_ID AS PR_ID,@EST_FORM_ID AS EXT_FORM_ID
  from contract c
inner join esOrder
on c.PLAN_ITEM_ID=esOrder.PLAN_ITEM_ID
where c.PROJECT_ID=@projectId
and c.INQUIRY_FORM_ID=@contractId
and esOrder.PR_ID BETWEEN @prid_s AND @prid_e 
";
                string sql = sb.Append(sql4ReceiveOrder).Replace("@EST_FORM_ID", "'" + form.EST_FORM_ID + "'").ToString();
                logger.Debug(sql);
                context.Database.ExecuteSqlCommand(sql, parameters.ToArray());

                //3.建立明細
                //3.1 更新表單檔頭金額
                string sql4Detail = @"
INSERT INTO PLAN_ESTIMATION_ITEM
select 
@EST_FORM_ID AS EXT_FORM_ID,
c.PLAN_ITEM_ID,
SUM(esOrder.RECEIPT_QTY) as EST_QTY,
1 as EST_RATIO,
SUM(RECEIPT_QTY) *c.ITEM_UNIT_PRICE as EST_AMOUNT,
NULL AS REMARK
 from contract c
inner join esOrder
on c.PLAN_ITEM_ID=esOrder.PLAN_ITEM_ID
where c.PROJECT_ID=@projectId
and c.INQUIRY_FORM_ID=@contractId
and esOrder.PR_ID BETWEEN @prid_s AND @prid_e 
GROUP BY c.PLAN_ITEM_ID,c.ITEM_UNIT_PRICE;
UPDATE 
PLAN_ESTIMATION_FORM
SET PAID_AMOUNT = 
(SELECT SUM(EST_AMOUNT) FROM PLAN_ESTIMATION_ITEM  WHERE EST_FORM_ID=@EST_FORM_ID)
WHERE EST_FORM_ID=@EST_FORM_ID;
";
                sb  = new StringBuilder(sql4Est);
                sql = sb.Append(sql4Detail).Replace("@EST_FORM_ID", "'" + form.EST_FORM_ID + "'").ToString();
                logger.Debug(sql);
                context.Database.ExecuteSqlCommand(sql, parameters.ToArray());
                //3.1 付款憑證資料
                modifyEstimationInvoice(form, listInvoice, context);
                //4.建立代付資料
                modifyEstimationHold(form, lstHoldPayment, context);
                logger.Debug("get Hold4Payment=" + JsonConvert.SerializeObject(lstHoldPayment).ToString());
                //5.建立代付扣款明細
                modifyEstimationTransfer(form, listTransferPayment, context);
                logger.Debug("get TransferPayment=" + JsonConvert.SerializeObject(listTransferPayment).ToString());
                context.SaveChanges();
            }
            //6.建立彙整金額
            SumEstimationForm(form);
        }
Esempio n. 7
0
        public List <PlanAccountFunction> getOutFlowBalanceByDate(string paymentDate, string duringStart, string duringEnd)
        {
            logger.Debug("get cash out flow balance by payment date, and payment date =" + paymentDate);
            List <PlanAccountFunction> lstItem = new List <PlanAccountFunction>();

            using (var context = new topmepEntities())
            {
                //條件篩選
                if (null != paymentDate && paymentDate != "")
                {
                    string sql = @"SELECT p.* , CONVERT(char(10), p.PAYMENT_DATE, 111) AS RECORDED_DATE, PARSENAME(Convert(varchar,Convert(money,ISNULL(p.AMOUNT_PAID, 0)),1),2) AS RECORDED_AMOUNT_PAYABLE, 
                            PARSENAME(Convert(varchar, Convert(money, ISNULL(it.AMOUNT, 0)), 1), 2) AS PAYBACK_AMOUNT, PARSENAME(Convert(varchar, Convert(money, ISNULL(p.AMOUNT_PAID, 0) - ISNULL(it.AMOUNT, 0)), 1), 2) AS RECORDED_AMOUNT_PAID  
                            FROM (
                            select o.PAYEE, CONVERT(datetime,o.PAYMENT_DATE, 111)PAYMENT_DATE, SUM(o.AMOUNT)AMOUNT_PAID 
                            from(SELECT CONVERT(varchar, PAYMENT_DATE, 111)PAYMENT_DATE, SUM(fei.AMOUNT)AMOUNT, PAYEE 
                            FROM FIN_EXPENSE_FORM fef LEFT JOIN FIN_EXPENSE_ITEM fei ON fef.EXP_FORM_ID = fei.EXP_FORM_ID 
                            WHERE fef.STATUS = 30 AND CONVERT(varchar, PAYMENT_DATE, 111) = @paymentDate 
                            GROUP BY CONVERT(varchar, PAYMENT_DATE, 111), PAYEE 
                            union 
                            SELECT CONVERT(char(10), PAYMENT_DATE, 111)PAYMENT_DATE, SUM(AMOUNT_PAID)AMOUNT_PAID, PAYEE 
                            FROM PLAN_ACCOUNT WHERE ISDEBIT = 'N' 
                            AND CONVERT(char(10), PAYMENT_DATE, 111) = @paymentDate 
                            GROUP BY PAYEE, CONVERT(char(10), PAYMENT_DATE, 111))o GROUP BY o.PAYEE, o.PAYMENT_DATE
                            )p LEFT JOIN(
                            SELECT SUM(t.AMOUNT)AMOUNT, l.BANK_NAME FROM FIN_LOAN_TRANACTION t LEFT JOIN FIN_BANK_LOAN l ON t.BL_ID = l.BL_ID  
                            WHERE ISNULL(l.IS_SUPPLIER, 'N') = 'Y' 
                            AND t.TRANSACTION_TYPE = 1 
                            OR ISNULL(l.IS_SUPPLIER, 'N') <> 'Y' 
                            AND t.REMARK NOT LIKE '%備償%' 
                            AND t.TRANSACTION_TYPE = -1 
                            AND CONVERT(char(10),IIF(TRANSACTION_TYPE = 1, PAYBACK_DATE, EVENT_DATE), 111) = @paymentDate 
                            GROUP BY l.BANK_NAME
                            )it ON it.BANK_NAME = p.PAYEE";
                    lstItem = context.Database.SqlQuery <PlanAccountFunction>(sql, new SqlParameter("paymentDate", paymentDate)).ToList();
                }
                else if (null != duringStart && duringStart != "" && null != duringEnd && duringEnd != "")
                {
                    lstItem = context.Database.SqlQuery <PlanAccountFunction>("SELECT p.* , CONVERT(char(10), p.PAYMENT_DATE, 111) AS RECORDED_DATE, PARSENAME(Convert(varchar,Convert(money,ISNULL(p.AMOUNT_PAID, 0)),1),2) AS RECORDED_AMOUNT_PAYABLE, " +
                                                                              "PARSENAME(Convert(varchar, Convert(money, ISNULL(it.AMOUNT, 0)), 1), 2) AS PAYBACK_AMOUNT, PARSENAME(Convert(varchar, Convert(money, ISNULL(p.AMOUNT_PAID, 0) - ISNULL(it.AMOUNT, 0)), 1), 2) AS RECORDED_AMOUNT_PAID  FROM " +
                                                                              "(select o.PAYEE, CONVERT(datetime,o.PAYMENT_DATE, 111)PAYMENT_DATE, SUM(o.AMOUNT)AMOUNT_PAID from(SELECT CONVERT(varchar, PAYMENT_DATE, 111)PAYMENT_DATE, SUM(fei.AMOUNT)AMOUNT, PAYEE FROM FIN_EXPENSE_FORM fef LEFT JOIN FIN_EXPENSE_ITEM fei ON fef.EXP_FORM_ID = fei.EXP_FORM_ID " +
                                                                              "WHERE fef.STATUS = 30 AND PAYMENT_DATE >= CONVERT(datetime, @duringStart, 111) AND PAYMENT_DATE <= CONVERT(varchar, @duringEnd, 111) GROUP BY CONVERT(varchar, PAYMENT_DATE, 111), PAYEE " +
                                                                              "union SELECT CONVERT(char(10), PAYMENT_DATE, 111)PAYMENT_DATE, SUM(AMOUNT_PAID)AMOUNT_PAID, PAYEE FROM PLAN_ACCOUNT WHERE ISDEBIT = 'N' AND PAYMENT_DATE >= CONVERT(datetime, @duringStart, 111) AND " +
                                                                              "PAYMENT_DATE <= CONVERT(datetime, @duringEnd, 111) GROUP BY PAYEE, CONVERT(char(10), PAYMENT_DATE, 111))o GROUP BY o.PAYEE, o.PAYMENT_DATE)p " +
                                                                              "LEFT JOIN(SELECT SUM(t.AMOUNT)AMOUNT, l.BANK_NAME FROM FIN_LOAN_TRANACTION t LEFT JOIN FIN_BANK_LOAN l ON t.BL_ID = l.BL_ID  WHERE ISNULL(l.IS_SUPPLIER, 'N') = 'Y' AND t.TRANSACTION_TYPE = 1 AND " +
                                                                              "IIF(TRANSACTION_TYPE = 1, PAYBACK_DATE, EVENT_DATE) >= CONVERT(datetime, @duringStart, 111) AND IIF(TRANSACTION_TYPE = 1, PAYBACK_DATE, EVENT_DATE) <= CONVERT(datetime, @duringEnd, 111) OR " +
                                                                              "ISNULL(l.IS_SUPPLIER, 'N') <> 'Y' AND t.REMARK NOT LIKE '%備償%' AND t.TRANSACTION_TYPE = -1 AND IIF(TRANSACTION_TYPE = 1, PAYBACK_DATE, EVENT_DATE) >= CONVERT(datetime, @duringStart, 111) AND " +
                                                                              "IIF(TRANSACTION_TYPE = 1, PAYBACK_DATE, EVENT_DATE) <= CONVERT(datetime, @duringEnd, 111) GROUP BY l.BANK_NAME)it " +
                                                                              "ON it.BANK_NAME = p.PAYEE ORDER BY p.PAYMENT_DATE ", new SqlParameter("duringStart", duringStart), new SqlParameter("duringEnd", duringEnd)).ToList();
                }
                else
                {
                    lstItem = context.Database.SqlQuery <PlanAccountFunction>("SELECT p.* , CONVERT(char(10), p.PAYMENT_DATE, 111) AS RECORDED_DATE, PARSENAME(Convert(varchar,Convert(money,ISNULL(p.AMOUNT_PAID, 0)),1),2) AS RECORDED_AMOUNT_PAYABLE, " +
                                                                              "PARSENAME(Convert(varchar, Convert(money, ISNULL(it.AMOUNT, 0)), 1), 2) AS PAYBACK_AMOUNT, PARSENAME(Convert(varchar, Convert(money, ISNULL(p.AMOUNT_PAID, 0) - ISNULL(it.AMOUNT, 0)), 1), 2) AS RECORDED_AMOUNT_PAID  FROM " +
                                                                              "(select o.PAYEE, CONVERT(datetime,o.PAYMENT_DATE, 111)PAYMENT_DATE, SUM(o.AMOUNT)AMOUNT_PAID from(SELECT CONVERT(varchar, PAYMENT_DATE, 111)PAYMENT_DATE, SUM(fei.AMOUNT)AMOUNT, PAYEE FROM FIN_EXPENSE_FORM fef LEFT JOIN FIN_EXPENSE_ITEM fei ON fef.EXP_FORM_ID = fei.EXP_FORM_ID " +
                                                                              "WHERE fef.STATUS = 30 GROUP BY CONVERT(varchar, PAYMENT_DATE, 111), PAYEE " +
                                                                              "union SELECT CONVERT(char(10), PAYMENT_DATE, 111)PAYMENT_DATE, SUM(AMOUNT_PAID)AMOUNT_PAID, PAYEE FROM PLAN_ACCOUNT WHERE ISDEBIT = 'N' GROUP BY PAYEE, CONVERT(char(10), PAYMENT_DATE, 111))o GROUP BY o.PAYEE, o.PAYMENT_DATE)p " +
                                                                              "LEFT JOIN(SELECT SUM(t.AMOUNT)AMOUNT, l.BANK_NAME FROM FIN_LOAN_TRANACTION t LEFT JOIN FIN_BANK_LOAN l ON t.BL_ID = l.BL_ID  WHERE ISNULL(l.IS_SUPPLIER, 'N') = 'Y' AND t.TRANSACTION_TYPE = 1 " +
                                                                              "OR ISNULL(l.IS_SUPPLIER, 'N') <> 'Y' AND t.REMARK NOT LIKE '%備償%' AND t.TRANSACTION_TYPE = -1 GROUP BY l.BANK_NAME)it " +
                                                                              "ON it.BANK_NAME = p.PAYEE ORDER BY p.PAYMENT_DATE ").ToList();
                }
            }
            return(lstItem);
        }
        public ActionResult AddItem(FormCollection f)
        {
            var inquiry = new topmeperp.Models.PLAN_SUP_INQUIRY();
            var formID  = Request["formID"];
            var order   = new topmeperp.Models.PLAN_CERT_ORDER();

            SerialKeyService snoservice = new SerialKeyService();
            string           ordKey     = snoservice.getSerialKey("EST");

            using (var context = new topmepEntities())
            {
                string sql;
                inquiry = context.PLAN_SUP_INQUIRY.SqlQuery("SELECT * FROM PLAN_SUP_INQUIRY WHERE INQUIRY_FORM_ID = '" + formID + "'").ToList().First();
                sql     = "INSERT INTO PLAN_CERT_ORDER (CERT_ORD_ID,INQUIRY_FORM_ID,SUPPLIER_ID,PROJECT_ID,CREATE_DATE) " +
                          "VALUES('" + ordKey + "','" + inquiry.INQUIRY_FORM_ID + "-" + ordKey + "','" + inquiry.SUPPLIER_ID + "','" + inquiry.PROJECT_ID + "','" + DateTime.Now.ToString() + "')";
                try
                {
                    //order.CERT_ORD_ID = "test";
                    //order.INQUIRY_FORM_ID = inquiry.INQUIRY_FORM_ID.ToString();
                    //order.SUPPLIER_ID = inquiry.SUPPLIER_ID.ToString();
                    //order.PROJECT_ID = inquiry.PROJECT_ID.ToString();
                    //context.PLAN_CERT_ORDER.Add(order);
                    context.Database.ExecuteSqlCommand(sql);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Console.Write(e.StackTrace);
                }

                var qty          = Request["qty"];
                var plan_item_id = Request["plan_item_id"];
                var type         = Request["type"];
                var subType      = Request["subType"];
                var itemID       = Request["itemID"];
                var desc         = Request["desc"];

                int[]    nums          = Array.ConvertAll(qty.Split(','), int.Parse);
                string[] plan_item_ids = plan_item_id.Split(',');
                string[] types         = type.Split(',');
                string[] subTypes      = subType.Split(',');
                string[] itemIDs       = itemID.Split(',');
                string[] descs         = desc.Split(',');

                //var test = new PLAN_CERT_ORDER_ITEM { CERT_ORD_ITEM_ID = generate_id(), ORDER_QTY = nums[0] };
                var test2 = new PLAN_CERT_ORDER_ITEM {
                    CERT_ORD_ITEM_ID = generate_id(), ORDER_QTY = nums[1]
                };

                //string sql = "INSERT INTO PLAN_CERT_ORDER_ITEM (CERT_ORD_ITEM_ID,ORDER_QTY) VALUES(28," + "10" + ")";
                try
                {
                    for (int i = 0; i < nums.Length; i++)
                    {
                        context.PLAN_CERT_ORDER_ITEM.Add(new PLAN_CERT_ORDER_ITEM
                        {
                            CERT_ORD_ITEM_ID = generate_id(),
                            CERT_ORD_ID      = ordKey,
                            TYPE_CODE        = types[i],
                            SUB_TYPE_CODE    = subTypes[i],
                            ITEM_ID          = itemIDs[i],
                            ITEM_DESC        = descs[i],
                            ORDER_QTY        = nums[i],
                            PLAN_ITEM_ID     = plan_item_ids[i]
                        });
                        string updateSql = "UPDATE PLAN_SUP_INQUIRY_ITEM SET ACCUMULATE_QTY = ACCUMULATE_QTY + "
                                           + nums[i] + " WHERE INQUIRY_FORM_ID = '" + formID + "' and PLAN_ITEM_ID = '" + plan_item_ids[i] + "'";
                        context.Database.ExecuteSqlCommand(updateSql);
                    }
                    //context.PLAN_CERT_ORDER_ITEM.Add(test2);
                    //var x=0;
                    //context.Database.ExecuteSqlCommand(sql);
                    context.SaveChanges();
                }
                catch (Exception e)
                {
                    Console.Write(e.StackTrace);
                }



                //generate random 64 int ID
                long testID = generate_id();

                string orderinfo = "{CERT_OrderID: " + order.CERT_ORD_ID + " FormID: " + inquiry.INQUIRY_FORM_ID + " Supplier: " + inquiry.SUPPLIER_ID + " ProjID: " + inquiry.PROJECT_ID;
                //return "Item added in " + formID + "\n" + nums[0] + ", " + nums[1] + sql+"\n("+testID+":"+ordKey+")"+plan_item_ids[0];
                return(RedirectToAction("Index/" + inquiry.PROJECT_ID));
            }
        }