using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using DSWeb.Areas.Import.Models.CRBill;
using DSWeb.Areas.Import.Models.CwVouchers;
using DSWeb.Areas.Import.Models.CwVouitems;
using DSWeb.Areas.Import.Models.CwDesign;
using DSWeb.Areas.Import.Models.CWAccitems;
using DSWeb.TruckMng.Helper;
using Microsoft.Practices.EnterpriseLibrary.Data;
using DSWeb.Areas.CommMng.Models;
using HcUtility.Comm;
using HcUtility.Core;
using DSWeb.Areas.Import.DAL.CwVouchersDAL;
using DSWeb.EntityDA;
namespace DSWeb.Areas.Import.Controllers
{
///
/// 收入成本生成凭证 列表
///
public class CostRevenueController : Controller
{
public ActionResult Index()
{
return View();
}
public ContentResult GetDataList(int start, int limit, string sort, string condition)
{
//2017年4月14日 modify by 张义伟 添加分页功能
var dataList = GetDataList(condition,sort,start,limit);
// var list = dataList.Skip(start).Take(limit);
int count = getTotalCount(condition);
var json = JsonConvert.Serialize(new { Success = true, Message = "查询成功", totalCount = count, data = dataList.ToList() });
return new ContentResult() { Content = json };
}
//2017年4月14日 modify by 张义伟 添加分页功能
private static List GetDataList(string strCondition, string sort,int start,int limit)
{
var strSql = new StringBuilder();
strSql.Append(@"SELECT * from (SELECT row_number() over (");
var sortstring = DatasetSort.Getsortstring(sort);
if (!string.IsNullOrEmpty(sortstring))
{
strSql.Append(" order by " + sortstring);
}
else
{
strSql.Append(" order by cf.ENTERDATE");
}
strSql.Append(@") as num , ");
strSql.Append(" cf.[GId],M.[ContractNo],[HTH],[seller],M.[company],[buyer],cf.feename,cf.CUSTOMERNAME,cf.AMOUNT, ");
strSql.Append(" M.[countryid],c.country,[creator],[MainState],[ShipCompany_id], [BillNo] ,[Vessel],[Voyage], ");
strSql.Append(" dbo.trimdate([Ex_sailingdate]) [Ex_sailingdate],dbo.trimdate([Sailingdate]) [Sailingdate], ");
strSql.Append(" dbo.trimdate([ArrivalDate]) [ArrivalDate],dbo.trimdate([creattime]) [creattime], ");
strSql.Append(" (select EnumValueName from tSysEnumValue where LangId=0 and EnumTypeID=3 and EnumValueID=M.MainState) as MainStateRef, ");
strSql.Append(" (select EnumValueName from tSysEnumValue where LangId=0 and EnumTypeID=10 and EnumValueID=M.port) as portRef, ");
strSql.Append(" (select EnumValueName from tSysEnumValue where LangId=0 and EnumTypeID=5 and EnumValueID=M.ShipCompany_id) as ShipCompanyRef, ");
strSql.Append(" (select EnumValueName from tSysEnumValue where LangId=0 and EnumTypeID=99024 and EnumValueID=cf.feestatus) as feestatusref, ");
strSql.Append(" (select EnumValueName from tSysEnumValue where LangId=0 and EnumTypeID=99020 and EnumValueID=cf.feetype) as feetyperef, ");
strSql.Append(" M.port, cf.remark,cf.ACCDATE,case cf.ISVOU when 1 then '是' else '否' end as ISVOU ,cf.VOUCHERNO ");
strSql.Append(" ,dbo.f_danhao(cf.gid,4) [AC_AD],dbo.f_danhao(cf.gid,1)+dbo.f_danhao(cf.gid,8) CR,dbo.f_danhao(cf.gid,2)+dbo.f_danhao(cf.gid,9) DR ");
strSql.Append(" FROM [dbo].[ch_fee] cf ");
strSql.Append(" left join import_main m on cf.bsno=m.contractno ");
strSql.Append(" left join code_country c on m.countryid=c.countryid ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where 1=1 and " + strCondition);
}
strSql.Append(@")as t ");
strSql.Append(string.Format("where t.num>{0} and t.num<={1} ", start, start + limit));
return SetData(strSql);
}
//2017年4月14日 add by 张义伟
///
/// 获取数据总数
///
/// 查询条件
///
private static int getTotalCount ( string strCondition)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(*) from [dbo].[ch_fee] cf left join import_main m on cf.bsno=m.contractno left join code_country c on m.countryid=c.countryid ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where 1=1 and " + strCondition);
}
int cnt = 0;
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
cnt = Convert.ToInt32(reader[0]);
}
}
return cnt;
}
private static List SetData(StringBuilder strSql)
{
var headList = new List();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
CRBill data = new CRBill();
#region Set DB data to Object
data.country = Convert.ToString(reader["country"]);
data.FEENAME = Convert.ToString(reader["FEENAME"]);
data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);
data.FEETYPEREF = Convert.ToString(reader["FEETYPEREF"]);
data.FEESTATUSREF = Convert.ToString(reader["FEESTATUSREF"]);
data.AMOUNT = Convert.ToString(reader["AMOUNT"]);
data.GId = Convert.ToString(reader["GId"]);
data.ContractNo = Convert.ToString(reader["ContractNo"]);
data.HTH = Convert.ToString(reader["HTH"]);
data.seller = Convert.ToString(reader["seller"]);
data.buyer = Convert.ToString(reader["buyer"]);
data.countryid = Convert.ToString(reader["countryid"]);
data.creator = Convert.ToString(reader["creator"]);
data.Mainstate = Convert.ToString(reader["Mainstate"]);
data.MainstateRef = Convert.ToString(reader["MainstateRef"]);
data.ShipCompany_id = Convert.ToString(reader["ShipCompany_id"]);
data.BillNo = Convert.ToString(reader["BillNo"]);
data.Vessel = Convert.ToString(reader["Vessel"]);
data.Voyage = Convert.ToString(reader["Voyage"]);
data.Ex_sailingdate = Convert.ToString(reader["Ex_sailingdate"]);
data.Sailingdate = Convert.ToString(reader["Sailingdate"]);
data.ArrivalDate = Convert.ToString(reader["ArrivalDate"]);
data.creattime = Convert.ToString(reader["creattime"]);
data.port = Convert.ToString(reader["port"]);
data.remark = Convert.ToString(reader["remark"]);
data.portRef = Convert.ToString(reader["portRef"]);
data.ShipCompanyRef = Convert.ToString(reader["ShipCompanyRef"]);
data.ACCDATE = Convert.ToString(reader["ACCDATE"]);
//data.ContractStatus = Convert.ToString(reader["ContractStatus"]);
data.ISVOU = Convert.ToString(reader["ISVOU"]);
data.VOUCHERNO = Convert.ToString(reader["VOUCHERNO"]);
data.AC = Convert.ToString(reader["AC_AD"]);
//data.AD = Convert.ToString(reader["AD"]);
data.CR = Convert.ToString(reader["CR"]);
data.DR = Convert.ToString(reader["DR"]);
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
public ContentResult CreateVoucher(string VoucherDate,string UsdExrate,string User,string useRate, string feesql)
{
var modb = new ModelObjectDB();
DBResult result = CreateDCVoucher(VoucherDate,UsdExrate,User,useRate,feesql);
var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message };
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
public static DBResult CreateDCVoucher(string VoucherDate, string UsdExrate, string User, string useRate, string feesql)
{
var result = new DBResult();
result.Success = true;
var HTH = "";
var VouitemsList = new List();
var VouOrdNo = Guid.NewGuid().ToString();
CwDesign CWDesign = CwVouchersDAL.GetCwDesign();
if (CWDesign.AR == "" || CWDesign.AR == null || CWDesign.AP == "" || CWDesign.AP == null || CWDesign.ARFC == "" || CWDesign.ARFC == null
|| CWDesign.APFC == "" || CWDesign.APFC == null || CWDesign.MBINCOME == "" || CWDesign.ARFC ==null)
{
result.Success = false;
result.Message = "请先设置帐套信息,才能生成凭证!";
}
else
{
var DebitAccID = CwVouchersDAL.GetCwAccitems(CWDesign.AR);
var UsdDebitAccID = CwVouchersDAL.GetCwAccitems(CWDesign.ARFC);
var CreditAccID = CwVouchersDAL.GetCwAccitems(CWDesign.AP);
var UsdCreditAccID = CwVouchersDAL.GetCwAccitems(CWDesign.APFC);
var InComeAccID = CwVouchersDAL.GetCwAccitems(CWDesign.MBINCOME);
decimal DebitAmt = Convert.ToDecimal(0.00);
decimal CreditAmt = Convert.ToDecimal(0.00);
int itemsno = 1;
CwVouchers Voucher = new CwVouchers();
Database db = DatabaseFactory.CreateDatabase();
using (var conn = db.CreateConnection())
{
conn.Open();
var strSql = new StringBuilder();
if (useRate == "1")
{
strSql.Append("SELECT m.HTH,FEETYPE");
strSql.Append(", FAPCODE=(select top 1 FAPCODE from info_client where SHORTNAME=c.CUSTOMERNAME) ");
strSql.Append(", FARCODE=(select top 1 FARCODE from info_client where SHORTNAME=c.CUSTOMERNAME) ");
strSql.Append(",c.CUSTOMERNAME,c.EXCHANGERATE,c.CURRENCY,c.ISADVANCEDPAY,SUM(c.AMOUNT) AS je,cast(round(SUM(c.AMOUNT*c.EXCHANGERATE),2) as numeric(20,2)) AS hj");
strSql.Append(",c.EXCHANGERATE From ch_fee c left join Import_main m on (m.ContractNo=c.bsno) WHERE c.GId IN " + feesql);
strSql.Append(" GROUP BY m.HTH,c.FEETYPE,c.CUSTOMERNAME,c.EXCHANGERATE,c.CURRENCY,c.ISADVANCEDPAY");
strSql.Append(" ORDER BY c.FEETYPE desc,c.CURRENCY,c.CUSTOMERNAME");
}
else
{
strSql.Append("SELECT m.HTH,FEETYPE");
strSql.Append(", FAPCODE=(select top 1 FAPCODE from info_client where SHORTNAME=c.CUSTOMERNAME) ");
strSql.Append(", FARCODE=(select top 1 FARCODE from info_client where SHORTNAME=c.CUSTOMERNAME) ");
strSql.Append(",c.CUSTOMERNAME,c.EXCHANGERATE,c.CURRENCY,c.ISADVANCEDPAY,SUM(c.AMOUNT) AS je,cast(round(SUM(c.AMOUNT*" + UsdExrate + "),2) as numeric(20,2)) AS hj,");
strSql.Append(UsdExrate + " as EXCHANGERATE From ch_fee c left join Import_main m on (m.ContractNo=c.bsno) WHERE c.GId IN " + feesql);
strSql.Append(" GROUP BY m.HTH,c.FEETYPE,c.CUSTOMERNAME,c.EXCHANGERATE,c.CURRENCY,c.ISADVANCEDPAY");
strSql.Append(" ORDER BY c.FEETYPE desc,c.CURRENCY,c.CUSTOMERNAME");
}
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
CwVouitems data = new CwVouitems();
HTH = Convert.ToString(reader["HTH"]);
if (HTH.Length > 25)
{
HTH = HTH.Substring(0, 25);
}
data.ORDNO = VouOrdNo;
data.BLNO = HTH;
var _explan = "合同号:" + HTH + " " + Convert.ToString(reader["CUSTOMERNAME"]);
data.EXPLAN = _explan;
data.ITEMNO = itemsno;
data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);
if (Convert.ToString(reader["FEETYPE"]) == "1")
{
data.ACCID = DebitAccID.ACCID;
data.ACCNAME = DebitAccID.ACCNAME;
if (DebitAccID.DC == "借")
{
data.DC ="D";
}
else if (DebitAccID.DC == "贷")
{
data.DC = "C";
}
if (Convert.ToString(reader["FARCODE"]) == "")
{
result.Success = false;
result.Message = "客户:" + Convert.ToString(reader["CUSTOMERNAME"]) + "没有设置对应的财务代码!";
}
data.CORPID = Convert.ToString(reader["FARCODE"]);
if (Convert.ToString(reader["CURRENCY"]) == "USD")
{
data.AMTDR = Convert.ToDecimal(reader["hj"]);
data.AMTCR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(reader["je"]);
data.FCYEXRATE = Convert.ToDecimal(reader["EXCHANGERATE"]);
data.FCYNO = "USD";
DebitAmt = DebitAmt + Convert.ToDecimal(reader["hj"]);
data.ACCID = UsdDebitAccID.ACCID;
data.ACCNAME = UsdDebitAccID.ACCNAME;
} else
if (Convert.ToString(reader["CURRENCY"]) != "USD" && Convert.ToString(reader["CURRENCY"]) != "RMB")
{
data.AMTDR = Convert.ToDecimal(reader["hj"]);
data.AMTCR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(reader["je"]);
data.FCYEXRATE = Convert.ToDecimal(reader["EXCHANGERATE"]);
data.FCYNO = Convert.ToString(reader["CURRENCY"]);
DebitAmt = DebitAmt + Convert.ToDecimal(reader["hj"]);
data.ACCID = UsdDebitAccID.ACCID;
data.ACCNAME = UsdDebitAccID.ACCNAME;
}
else
{
data.AMTDR = Convert.ToDecimal(reader["je"]);
data.AMTCR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(0.00);
data.FCYEXRATE = Convert.ToDecimal(0);
data.FCYNO = "RMB";
DebitAmt = DebitAmt + Convert.ToDecimal(reader["je"]);
}
}
else if (Convert.ToString(reader["FEETYPE"]) == "2")
{
data.ACCID = CreditAccID.ACCID;
data.ACCNAME = CreditAccID.ACCNAME;
data.DC = CreditAccID.DC;
if (Convert.ToString(reader["FARCODE"]) == "")
{
result.Success = false;
result.Message = "客户:" + Convert.ToString(reader["CUSTOMERNAME"]) + "没有设置对应的财务代码!";
}
data.CORPID = Convert.ToString(reader["FAPCODE"]);
if (Convert.ToString(reader["CURRENCY"]) == "USD")
{
data.AMTCR = Convert.ToDecimal(reader["hj"]);
data.AMTDR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(reader["je"]);
data.FCYEXRATE = Convert.ToDecimal(reader["EXCHANGERATE"]);
data.FCYNO = "USD";
CreditAmt = CreditAmt + Convert.ToDecimal(reader["hj"]);
data.ACCID = UsdCreditAccID.ACCID;
data.ACCNAME = UsdCreditAccID.ACCNAME;
}
else if (Convert.ToString(reader["CURRENCY"]) != "USD" && Convert.ToString(reader["CURRENCY"]) != "RMB")
{
data.AMTCR = Convert.ToDecimal(reader["hj"]);
data.AMTDR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(reader["je"]);
data.FCYEXRATE = Convert.ToDecimal(reader["EXCHANGERATE"]);
data.FCYNO = Convert.ToString(reader["CURRENCY"]);
CreditAmt = CreditAmt + Convert.ToDecimal(reader["hj"]);
data.ACCID = UsdCreditAccID.ACCID;
data.ACCNAME = UsdCreditAccID.ACCNAME;
}
else
{
data.AMTCR = Convert.ToDecimal(reader["je"]);
data.AMTDR = Convert.ToDecimal(0.00);
data.FCYCR = Convert.ToDecimal(0.00);
data.FCYDR = Convert.ToDecimal(0.00);
data.FCYEXRATE = Convert.ToDecimal(0);
data.FCYNO = "RMB";
CreditAmt = CreditAmt + Convert.ToDecimal(reader["je"]);
}
}
itemsno = itemsno + 1;
VouitemsList.Add(data);
}
reader.Close();
if (DebitAmt != CreditAmt)
{
CwVouitems Incomeitems = new CwVouitems();
Incomeitems.ORDNO = VouOrdNo;
Incomeitems.BLNO = HTH;
Incomeitems.EXPLAN = "合同号:" + HTH;
Incomeitems.ITEMNO = itemsno;
Incomeitems.ACCID = InComeAccID.ACCID;
Incomeitems.ACCNAME = InComeAccID.ACCNAME;
Incomeitems.DC = InComeAccID.DC;
Incomeitems.AMTCR = Convert.ToDecimal(DebitAmt - CreditAmt);
Incomeitems.AMTDR = Convert.ToDecimal(0.00);
Incomeitems.FCYCR = Convert.ToDecimal(0.00);
Incomeitems.FCYDR = Convert.ToDecimal(0.00);
Incomeitems.FCYEXRATE = Convert.ToDecimal(0.00);
Incomeitems.FCYNO = "RMB";
VouitemsList.Add(Incomeitems);
}
}
Voucher.ORDNO = VouOrdNo;
var voudate = Convert.ToDateTime(VoucherDate);
Voucher.ACCYEAR = voudate.ToString("yyyy");
Voucher.ACCMONTH = voudate.ToString("MM");
Voucher.PREPARED = User;
Voucher.VOUDATE = voudate;
Voucher.VKNO = CWDesign.TVW;
if (DebitAmt >= CreditAmt)
{
Voucher.AMTDR = DebitAmt;
Voucher.AMTCR = DebitAmt;
}
else
{
Voucher.AMTDR = CreditAmt;
Voucher.AMTCR = CreditAmt;
}
//帐套设置
T_ALL_DA T_ALL_DA = new T_ALL_DA();
DataSet dsCwDesign = T_ALL_DA.GetAllSQL("SELECT top 1 * from cw_design");
if (dsCwDesign == null)
{
result.Success = false;
result.Message = "没有设置账套信息!";
}
Voucher.VOUNO = CwVouchersDAL.getVOUNO(dsCwDesign, Voucher.ACCYEAR, Voucher.ACCMONTH);
Voucher.VOUALLNO = Voucher.ACCYEAR + Voucher.ACCMONTH + Voucher.VOUNO;
Voucher.ATTACHS = CWDesign.AFFIXNO;
Voucher.FCY = "";
Voucher.QTY = "";//是否含有数量科目="";//varchar="";//(1)
Voucher.VOUPROP = "";//凭证属性="";//varchar="";//(1)
Voucher.CHECKED = "";//审核人="";//varchar="";//(10)
Voucher.ENTERED = "";//记账人="";//varchar="";//(10)
Voucher.ERRMSG = "";//错误信息="";//varchar="";//(6)
Voucher.ISDELETE = false;//是否废除="";//bit="";//Y
Voucher.DELETEUSER = "";//废除操作人="";//Varchar(36)="";//Y
}
var strSel = " AND GId in " + feesql;
if (result.Success)
{
result = CwVouchersDAL.InsertVoucher(Voucher, VouitemsList, "ch_fee", Voucher.VOUALLNO, strSel, User);
}
}
return result;
}
public ContentResult SetACCDATE(string ACCDATE, string feesql)
{
var modb = new ModelObjectDB();
DBResult result = SetFEEACCDATE(ACCDATE, feesql);
var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message };
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
public ContentResult SetAllACCDATE ( string ACCDATE, string condition )
{
var modb = new ModelObjectDB();
DBResult result = CwVouchersDAL.SetAllACCDATE(ACCDATE, "ch_fee", condition);
var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message };
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
public ContentResult SetBusinessACCDATE ( string ACCDATE, string feesql )
{
var modb = new ModelObjectDB();
DBResult result = SetBusinessFEEACCDATE(ACCDATE, feesql);
var jsonRespose = new JsonResponse { Success = result.Success, Message = result.Message };
return new ContentResult() { Content = JsonConvert.Serialize(jsonRespose) };
}
public static DBResult SetFEEACCDATE(string ACCDATE, string feesql)
{
var strSel = " AND GId in " + feesql;
var result = CwVouchersDAL.SetFEEACCDATE(ACCDATE, "ch_fee", strSel);
return result;
}
public static DBResult SetBusinessFEEACCDATE ( string ACCDATE, string feesql )
{
var strSel = " AND BSNO in " + feesql + " and feestatus in(0,8,9) and isnull(accdate,'')=''";
var result = CwVouchersDAL.SetFEEACCDATE(ACCDATE, "ch_fee", strSel);
return result;
}
}
}