zoie 1 gadu atpakaļ
vecāks
revīzija
4c13782679

+ 52 - 24
controllers/Contract.go

@@ -162,6 +162,10 @@ func (c *ContractController) Contract_Add() {
 	T_project := c.GetString("T_project")
 	T_recoveries := c.GetString("T_recoveries")
 	T_invoice := c.GetString("T_invoice")
+	T_submit := c.GetString("T_submit")
+	if len(T_submit) == 0 {
+		T_submit = c.User.T_uuid
+	}
 
 	var_ := Contract.Contract{
 		T_number:     T_number,
@@ -175,7 +179,7 @@ func (c *ContractController) Contract_Add() {
 		T_State:      3,
 		T_remark:     T_remark,
 		T_pdf:        T_pdf,
-		T_submit:     c.User.T_uuid,
+		T_submit:     T_submit,
 		T_recoveries: T_recoveries,
 		T_invoice:    T_invoice,
 	}
@@ -285,6 +289,7 @@ func (c *ContractController) Contract_Edit() {
 	T_project := c.GetString("T_project")
 	T_recoveries := c.GetString("T_recoveries")
 	T_invoice := c.GetString("T_invoice")
+	T_submit := c.GetString("T_submit")
 
 	o := orm.NewOrm()
 	o.Begin()
@@ -323,13 +328,16 @@ func (c *ContractController) Contract_Edit() {
 	if len(T_invoice) > 0 {
 		contract.T_invoice = T_invoice
 	}
+	if len(T_submit) > 0 {
+		contract.T_submit = T_submit
+	}
 
 	//1-已通过 2-未通过 3-待审核 合同状态为未通过,修改之后将状态更改为待审核
 	if contract.T_State == 2 {
 		contract.T_State = 3
 	}
 
-	err = ContractDao.Update_Contract(contract, "T_customer", "T_money", "T_date", "T_remark", "T_pdf", "T_State", "T_project", "T_recoveries", "T_invoice")
+	err = ContractDao.Update_Contract(contract, "T_customer", "T_money", "T_date", "T_remark", "T_pdf", "T_State", "T_project", "T_recoveries", "T_invoice", "T_submit")
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}
@@ -500,18 +508,18 @@ func (c *ContractController) Contract_Del() {
 		return
 	}
 	//合同类型 1-销售合同 2-验证合同
-	if contract.T_type == 1 {
-		cpList := ContractProductDao.Read_ContractProduct_List(T_number)
-		for _, v := range cpList {
-			err = ContractProductDao.Delete_ContractProduct(v)
-			if err != nil {
-				o.Rollback()
-				c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
-				c.ServeJSON()
-				return
-			}
+
+	cpList := ContractProductDao.Read_ContractProduct_List(T_number)
+	for _, v := range cpList {
+		err = ContractProductDao.Delete_ContractProduct(v)
+		if err != nil {
+			o.Rollback()
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "删除失败!"}
+			c.ServeJSON()
+			return
 		}
 	}
+
 	o.Commit()
 
 	NatsServer.AddUserLogs(c.User.T_uuid, "合同", "删除", T_number)
@@ -569,13 +577,8 @@ func (c *ContractController) Contract_Product_List() {
 		c.ServeJSON()
 		return
 	}
-	if contract.T_type == 2 {
-		c.Data["json"] = lib.JSONS{Code: 200, Msg: "ok!"}
-		c.ServeJSON()
-		return
-	}
 
-	productList := ContractProductDao.Read_ContractProduct_List(contract.T_number)
+	productList := ContractProductDao.Read_ContractProduct_OutList(contract.T_number)
 	Stock.Read_Stock_All_Map(T_depot_id)
 
 	var pList []Contract.ContractProduct_Out
@@ -658,6 +661,7 @@ func (c *ContractController) VerifyContract_Add() {
 	T_discount, _ := c.GetFloat("T_discount")
 	T_date := c.GetString("T_date")
 	T_product := c.GetString("T_product")
+	T_submit := c.GetString("T_submit")
 	T_remark := c.GetString("T_remark")
 	T_pdf := c.GetString("T_pdf")
 	T_project := c.GetString("T_project")
@@ -677,7 +681,7 @@ func (c *ContractController) VerifyContract_Add() {
 		T_State:       1,
 		T_remark:      T_remark,
 		T_pdf:         T_pdf,
-		T_submit:      c.User.T_uuid,
+		T_submit:      T_submit,
 		T_recoveries:  T_recoveries,
 		T_invoice:     T_invoice,
 		T_start_date:  T_start_date,
@@ -704,7 +708,7 @@ func (c *ContractController) VerifyContract_Add() {
 		return
 	}
 
-	_, err = ContractDao.Add_Contract(var_)
+	ContractID, err := ContractDao.Add_Contract(var_)
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}
@@ -714,20 +718,30 @@ func (c *ContractController) VerifyContract_Add() {
 
 	if len(T_product) == 0 {
 		o.Rollback()
-		c.Data["json"] = lib.JSONS{Code: 202, Msg: "销售合同产品明细不能为空"}
+		c.Data["json"] = lib.JSONS{Code: 202, Msg: "验证合同明细不能为空"}
 		c.ServeJSON()
 		return
 	}
 	productList := lib.SplitString(T_product, "|")
+	ContractOut := 0
 	for _, v := range productList {
 		product_id, _ := strconv.Atoi(strings.Split(v, ",")[0])
 		num, _ := strconv.Atoi(strings.Split(v, ",")[1])
+		price := lib.StringToFloat64TwoDecimal(strings.Split(v, ",")[2])
+		product, _ := Basic.Read_Product_ById(product_id)
 		contractProduct := Contract.ContractProduct{
 			T_contract_number: T_number,
 			T_product_id:      product_id,
 			T_product_total:   num,
-			T_product_out:     0, // 已出库数量
-			T_State:           1, // 1-未出库 2-已部分出库 3-已全部出库
+			T_product_out:     0,              // 已出库数量
+			T_price:           float32(price), // 已出库数量
+			T_State:           1,              // 1-未出库 2-已部分出库 3-已全部出库
+		}
+		if product.T_class < 0 {
+			contractProduct.T_State = 3
+		}
+		if product.T_class == 0 {
+			ContractOut = 1
 		}
 		_, err = ContractProductDao.Add_ContractProduct(contractProduct)
 		if err != nil {
@@ -740,6 +754,16 @@ func (c *ContractController) VerifyContract_Add() {
 	}
 
 	o.Commit()
+	o2 := orm.NewOrm()
+	ContractDao2 := Contract.NewContract(o2)
+	if ContractOut == 1 {
+		err = ContractDao2.Update_Contract(Contract.Contract{Id: int(ContractID), T_out: ContractOut}, "T_out")
+		if err != nil {
+			c.Data["json"] = lib.JSONS{Code: 202, Msg: "更新合同出库状态失败"}
+			c.ServeJSON()
+			return
+		}
+	}
 
 	err = Update_VerifyContract_State(T_customer_id, "ADD")
 	if err != nil {
@@ -768,6 +792,7 @@ func (c *ContractController) VerifyContract_Edit() {
 	T_invoice := c.GetString("T_invoice")
 	T_start_date := c.GetString("T_start_date")
 	T_end_date := c.GetString("T_end_date")
+	T_submit := c.GetString("T_submit")
 
 	o := orm.NewOrm()
 	o.Begin()
@@ -809,8 +834,11 @@ func (c *ContractController) VerifyContract_Edit() {
 	if len(T_end_date) > 0 {
 		contract.T_end_date = T_end_date
 	}
+	if len(T_submit) > 0 {
+		contract.T_submit = T_submit
+	}
 
-	err = ContractDao.Update_Contract(contract, "T_money", "T_date", "T_remark", "T_pdf", "T_State", "T_project", "T_recoveries", "T_invoice", "T_start_date", "T_end_date")
+	err = ContractDao.Update_Contract(contract, "T_money", "T_date", "T_remark", "T_pdf", "T_State", "T_project", "T_recoveries", "T_invoice", "T_start_date", "T_end_date", "T_submit")
 	if err != nil {
 		o.Rollback()
 		c.Data["json"] = lib.JSONS{Code: 203, Msg: "添加失败"}

+ 2 - 2
models/Basic/Product.go

@@ -204,7 +204,7 @@ func Read_Product_List(T_name, T_model string, T_class, T_VerifyContract, page,
 	cond := orm.NewCondition()
 	cond1 := cond.And("T_State", 1)
 	if T_VerifyContract == 1 {
-		cond1 = cond1.And("T_class", 0)
+		cond1 = cond1.And("T_class__lte", 0)
 	} else {
 		cond1 = cond1.And("T_class__gt", 0)
 	}
@@ -223,7 +223,7 @@ func Read_Product_List(T_name, T_model string, T_class, T_VerifyContract, page,
 
 	// 查询
 	var r []Product
-	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("-Id").All(&r)
+	_, err := qs.Limit(page_z, offset).SetCond((*orm2.Condition)(cond1)).OrderBy("T_class", "-Id").All(&r)
 
 	if err != nil {
 		logs.Error(lib.FuncName(), err)

+ 7 - 2
models/Contract/Contract.go

@@ -173,6 +173,7 @@ func ContractToContract_Detail(t Contract, productList []ContractProduct_R) (r C
 	r.T_number = t.T_number
 	r.T_customer = t.T_customer
 	r.T_money = t.T_money
+	r.T_discount = t.T_discount
 	r.T_project = t.T_project
 	r.T_type = t.T_type
 	r.T_date = t.T_date
@@ -297,9 +298,13 @@ func (dao *ContractDaoImpl) Read_Contract_List(T_submit, T_name string, T_state,
 
 	// 过滤
 	cond := orm.NewCondition()
-	cond1 := cond.And("T_State__gt", 0).And("T_type", 1)
+	cond1 := cond.And("T_State__gt", 0)
 	if T_state > 0 {
-		cond1 = cond.And("T_State", T_state)
+		cond1 = cond1.And("T_State", T_state)
+	}
+	if T_out != 1 {
+		cond1 = cond1.And("T_type", 1)
+
 	}
 
 	if len(T_name) > 0 {

+ 59 - 26
models/Contract/ContractProduct.go

@@ -21,6 +21,7 @@ type ContractProduct struct {
 	T_product_id      int       `orm:"size(20);null"`                                         // 产品id
 	T_product_total   int       `orm:"size(20);null"`                                         // 产品总数量
 	T_product_out     int       `orm:"size(20);null"`                                         // 产品已出库数量
+	T_price           float32   `orm:"digits(12);decimals(2)"`                                // 产品单价
 	T_State           int       `orm:"size(2);default(1)"`                                    // 0-已删除 1-未出库 2-已部分出库 3-已全部出库
 	CreateTime        time.Time `orm:"column(create_time);type(timestamp);null;auto_now_add"` //auto_now_add 第一次保存时才设置时间
 	UpdateTime        time.Time `orm:"column(update_time);type(timestamp);null;auto_now"`     //auto_now 每次 model 保存时都会对时间自动更新
@@ -31,6 +32,7 @@ type ContractProductInfo struct {
 	T_product_id    int
 	T_product_total int
 	T_product_out   int
+	T_price         float32
 	T_State         int
 }
 
@@ -53,10 +55,11 @@ func init() {
 
 type ContractProduct_R struct {
 	Id                int
-	T_contract_number string // 合同编号
-	T_product_total   int    // 产品总数量
-	T_product_out     int    // 产品已出库数量
-	T_State           int    // 1-未出库 2-已部分出库 3-已全部出库
+	T_contract_number string  // 合同编号
+	T_product_total   int     // 产品总数量
+	T_product_out     int     // 产品已出库数量
+	T_price           float32 // 产品单价
+	T_State           int     // 1-未出库 2-已部分出库 3-已全部出库
 
 	// ---------产品信息-----------
 	T_product_id          int      // 产品id
@@ -66,47 +69,46 @@ type ContractProduct_R struct {
 	T_product_spec        string   // 产品规格
 	T_product_relation_sn int      // 关联sn 0-否 1-是
 	T_product_img         string   // 图片
-	T_price               float32  // 单价
 	T_device_list         []string // sn关联列表
 
 }
 
 type ContractProduct_Out struct {
 	Id                int
-	T_contract_number string // 合同编号
-	T_stock_total     int    // 库存总数量
-	T_product_total   int    // 产品总数量
-	T_product_out     int    // 产品已出库数量
-	T_State           int    // 1-未出库 2-已部分出库 3-已全部出库
+	T_contract_number string  // 合同编号
+	T_stock_total     int     // 库存总数量
+	T_product_total   int     // 产品总数量
+	T_product_out     int     // 产品已出库数量
+	T_price           float32 // 单价
 
+	T_State int // 1-未出库 2-已部分出库 3-已全部出库
 	// ---------产品信息-----------
-	T_product_id          int     // 产品id
-	T_product_name        string  // 产品分类
-	T_product_class_name  string  // 产品分类名称
-	T_product_model       string  // 产品型号
-	T_product_spec        string  // 产品规格
-	T_product_relation_sn int     // 关联sn 0-否 1-是
-	T_product_img         string  // 图片
-	T_price               float32 // 单价
+	T_product_id          int    // 产品id
+	T_product_name        string // 产品分类
+	T_product_class_name  string // 产品分类名称
+	T_product_model       string // 产品型号
+	T_product_spec        string // 产品规格
+	T_product_relation_sn int    // 关联sn 0-否 1-是
+	T_product_img         string // 图片
 }
 
 func ContractProductToContractProduct_R(t ContractProduct) (r ContractProduct_R) {
+	r.T_product_id = t.T_product_id
+	product, _ := Basic.Read_Product_ById(t.T_product_id)
+
 	r.Id = t.Id
 	r.T_contract_number = t.T_contract_number
 	r.T_product_total = t.T_product_total
 	r.T_product_out = t.T_product_out
+	r.T_price = t.T_price
 	r.T_State = t.T_State
 
-	r.T_product_id = t.T_product_id
-	product, _ := Basic.Read_Product_ById(t.T_product_id)
-	r.T_product_name = product.T_name
 	r.T_product_name = product.T_name
 	r.T_product_class_name = Basic.Read_ProductClass_Get(product.T_class)
 	r.T_product_model = product.T_model
 	r.T_product_spec = product.T_spec
 	r.T_product_relation_sn = product.T_relation_sn
 	r.T_product_img = product.T_img
-	r.T_price = product.T_price
 	return r
 }
 func ContractProductToContractProduct_Out(t ContractProduct) (r ContractProduct_Out) {
@@ -114,6 +116,7 @@ func ContractProductToContractProduct_Out(t ContractProduct) (r ContractProduct_
 	r.T_contract_number = t.T_contract_number
 	r.T_product_total = t.T_product_total
 	r.T_product_out = t.T_product_out
+	r.T_price = t.T_price
 	r.T_State = t.T_State
 
 	r.T_product_id = t.T_product_id
@@ -124,7 +127,6 @@ func ContractProductToContractProduct_Out(t ContractProduct) (r ContractProduct_
 	r.T_product_spec = product.T_spec
 	r.T_product_relation_sn = product.T_relation_sn
 	r.T_product_img = product.T_img
-	r.T_price = product.T_price
 	return r
 }
 
@@ -179,6 +181,7 @@ func (dao *ContractProductDaoImpl) Delete_ContractProduct(v ContractProduct) err
 
 // 获取列表
 func (dao *ContractProductDaoImpl) Read_ContractProduct_List(T_number string) (r_ []ContractProduct) {
+	var maps []ContractProduct
 	// 也可以直接使用 Model 结构体作为表名
 	qs := dao.orm.QueryTable(new(ContractProduct))
 	// 过滤
@@ -190,15 +193,45 @@ func (dao *ContractProductDaoImpl) Read_ContractProduct_List(T_number string) (r
 	}
 
 	// 查询
-	var r []ContractProduct
-	_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&r)
+	_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&maps)
 
 	if err != nil {
 		logs.Error(lib.FuncName(), err)
 		return
 	}
 
-	return r
+	return maps
+}
+func (dao *ContractProductDaoImpl) Read_ContractProduct_OutList(T_number string) (r_ []ContractProduct) {
+	var maps []ContractProduct
+	// 也可以直接使用 Model 结构体作为表名
+	//qs := dao.orm.QueryTable(new(ContractProduct))
+	//// 过滤
+	//cond := orm.NewCondition()
+	//cond = cond.And("T_State__gt", 0)
+	//
+	//if len(T_number) > 0 {
+	//	cond = cond.And("T_contract_number", T_number)
+	//}
+	//
+	//// 查询
+
+	//_, err := qs.SetCond((*orm2.Condition)(cond)).OrderBy("Id").All(&maps)
+	//
+	//if err != nil {
+	//	logs.Error(lib.FuncName(), err)
+	//	return
+	//}
+
+	sql := "SELECT cp.ID,t_contract_number, t_product_id, t_product_total, t_product_out, cp.t__state, cp.create_time, cp.update_time, cp.t_price" +
+		" FROM contract_product cp LEFT JOIN product ON cp.t_product_id=product.ID" +
+		" WHERE cp.t_contract_number='" + T_number + "' AND product.t_class>=0 AND cp.t__state>0"
+	fmt.Println(sql)
+	_, err := dao.orm.Raw(sql).QueryRows(&maps)
+	if err != nil {
+		logs.Error(lib.FuncName(), err)
+	}
+	return maps
 }
 
 func (dao *ContractProductDaoImpl) Read_ContractProduct_T_State_List(T_number string) int64 {