/*
 * @description: 合同已支付相关
 * @Author: CP
 * @Date: 2020-12-22 11:45:22
 * @FilePath: \construction_management\web\api\contract_paid_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
// @Param   contractsId     path    string     true        "合同ID"
// @Param   bidsectionId     path    string     true        "标段ID"
// @Success 200 {object} viewmodels.TreeSectionContract "{code:0成功,-1参数类错误,msg:错误信息}"
// @Router /api/contract/paid/list [get]
func (c *ContractApi) GetPaidList() {
	returnData, err := c.ServiceContract.ValidRuleContractPaid(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.PaidAll(projectId, bidsectionId, contractsId, returnData.Page)

	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/paid/create [post]
func (c *ContractApi) PostPaidCreate() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractPaidAdd(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.PaidCreate(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/paid/update [post]
func (c *ContractApi) PostPaidUpdate() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractPaidAdd(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.PaidUpdate(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/piad/delete [delete]
func (c *ContractApi) DeletePaidDelete() {
	// 验证参数
	returnData, err := c.ServiceContract.ValidRuleContractPaidDel(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.PaidDelete(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": "删除成功"})
}
