/*
 * @description:合同回款相关
 * @Author: CP
 * @Date: 2020-11-26 11:32:21
 * @FilePath: \construction_management\web\api\contract_return_api.go
 */
package api

import (
	"fmt"

	"github.com/kataras/iris/v12"
	"go.mod/web/utils"
	"go.mod/web/viewmodels"
)

// @Summary 获得回款类型
// @Tags 合同管理
// @Description 获得回款类型
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/return/way [get]
func (c *ContractApi) GetReturnWay() {

	way := [8]string{"支票", "现金", "网上转账", "电汇", "邮政汇款", "支付宝", "微信支付", "其他"}

	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "",
		"data": way,
	})
}

// @Summary 获得回款列表
// @Tags 合同管理-收入合同
// @Description 获得回款列表
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   contractsId     path    string     true        "合同ID"
// @Param   bidsectionId     path    string     true        "标段ID"
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/return/list [get]
func (c *ContractApi) GetReturnList() {
	returnData, err := c.ServiceContract.ValidRuleContractRetrun(c.Ctx)

	// 项目ID
	projectId, err := utils.GetProjectId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 标段ID
	bidsectionId, err := utils.GetDecryptId(returnData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 合同ID
	contractsId, err := utils.GetDecryptId(returnData.ContractsId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	returnList := c.ServiceContract.ReturnAll(projectId, bidsectionId, contractsId, returnData.Page)
	//returnCount:=c.ServiceContract.ReturnCount(projectId, bidsectionId, contractsId,)
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "",
		"data": returnList,
	})
}

// @Summary 新增回款内容
// @Tags 合同管理-收入合同
// @Description 新增回款内容
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   contractsId     path    string     true        "合同ID"
// @Param   bidsectionId     path    string     true        "标段ID"
// @Param   time     path    string     true        "回款时间"
// @Param   Price     path    string     true        "回款金额"
// @Param   Way     path    string     true        "回款方式"
// @Param   remarks     path    string     true        "备注"
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/return/create [post]
func (c *ContractApi) PostReturnCreate() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractRetrunAdd(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 项目ID
	projectId, err := utils.GetProjectId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 标段ID
	bidsectionId, err := utils.GetDecryptId(returnData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 合同ID
	contractsId, err := utils.GetDecryptId(returnData.ContractsId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 获得项目账号ID
	projectAccountId, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": err})
		return
	}

	account := c.Ctx.Values().Get("account").(*viewmodels.ProjectAccount)
	returnData.CreateUser = account.Account

	err = c.ServiceContract.ReturnCreate(returnData, projectId, bidsectionId, contractsId, projectAccountId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{"code": 0, "msg": "新增成功"})
}

// @Summary 更新回款内容
// @Tags 合同管理-收入合同
// @Description 更新回款内容
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   id     path    string     true        "回款ID"
// @Param   contractsId     path    string     true        "合同ID"
// @Param   bidsectionId     path    string     true        "标段ID"
// @Param   time     path    string     true        "回款时间"
// @Param   Price     path    string     true        "回款金额"
// @Param   Way     path    string     true        "回款方式"
// @Param   remarks     path    string     true        "备注"
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/return/update [post]
func (c *ContractApi) PostReturnUpdate() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractRetrunAdd(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 项目ID
	projectId, err := utils.GetProjectId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 标段ID
	bidsectionId, err := utils.GetDecryptId(returnData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 合同ID
	contractsId, err := utils.GetDecryptId(returnData.ContractsId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	if returnData.Id == "" {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "回款ID不能为空"})
		return
	}
	// 回款ID
	id, err := utils.GetDecryptId(returnData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	err = c.ServiceContract.ReturnUpdate(returnData, projectId, bidsectionId, contractsId, id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{"code": 0, "msg": "编辑成功"})
}

// @Summary 删除回款
// @Tags 合同管理-收入合同
// @Description 删除回款
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   id     path    string     true        "回款ID"
// @Param   contractsId     path    string     true        "合同ID"
// @Param   bidsectionId     path    string     true        "标段ID"
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/return/delete [delete]
func (c *ContractApi) DeleteReturnDelete() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractRetrunDel(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 项目ID
	projectId, err := utils.GetProjectId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 标段ID
	bidsectionId, err := utils.GetDecryptId(returnData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 合同ID
	contractsId, err := utils.GetDecryptId(returnData.ContractsId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	// 回款ID
	id, err := utils.GetDecryptId(returnData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}

	err = c.ServiceContract.ReturnDelete(projectId, bidsectionId, contractsId, id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{"code": 0, "msg": "删除成功"})
}
