cooperation_contract.go 7.1 KB
package transform

import (
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/pg/models"
	"gitlab.fjmaimaimai.com/allied-creation/allied-creation-cooperation/pkg/infrastructure/utils"
)

func TransformToCooperationContractDomainModelFromPgModels(
	cooperationContractModel *models.CooperationContract,
	cooperationMode *models.CooperationMode,
	dividendsIncentivesRules []*models.DividendsIncentivesRule,
	moneyIncentivesRules []*models.MoneyIncentivesRule,
	relevantPeople []*models.CooperationContractRelevant,
	undertakers []*models.CooperationContractUndertaker) (*domain.CooperationContract, error) {
	// 分红激励规则
	var dividendsIncentivesRulesDomain []*domain.DividendsIncentivesRule
	for _, rule := range dividendsIncentivesRules {
		stageString := utils.NumberToCNNumber(int(rule.DividendsIncentivesStage))
		dividendsIncentivesRulesDomain = append(dividendsIncentivesRulesDomain, &domain.DividendsIncentivesRule{
			DividendsIncentivesRuleId:     rule.DividendsIncentivesRuleId,
			CooperationContractNumber:     rule.CooperationContractNumber,
			ReferrerPercentage:            rule.ReferrerPercentage,
			SalesmanPercentage:            rule.SalesmanPercentage,
			DividendsIncentivesPercentage: rule.DividendsIncentivesPercentage,
			DividendsIncentivesStage:      rule.DividendsIncentivesStage,
			DividendsIncentivesStageCN:    stageString,
			DividendsIncentivesStageEnd:   rule.DividendsIncentivesStageEnd.Local(),
			DividendsIncentivesStageStart: rule.DividendsIncentivesStageStart.Local(),
			Org:                           rule.Org,
			Company:                       rule.Company,
			UpdatedAt:                     rule.UpdatedAt,
			DeletedAt:                     rule.DeletedAt,
			CreatedAt:                     rule.CreatedAt,
			Remarks:                       rule.Remarks,
		})
	}
	// 金额激励规则
	var moneyIncentivesRulesDomain []*domain.MoneyIncentivesRule
	for _, rule := range moneyIncentivesRules {
		stageString := utils.NumberToCNNumber(int(rule.MoneyIncentivesStage))
		moneyIncentivesRulesDomain = append(moneyIncentivesRulesDomain, &domain.MoneyIncentivesRule{
			MoneyIncentivesRuleId:     rule.MoneyIncentivesRuleId,
			CooperationContractNumber: rule.CooperationContractNumber,
			MoneyIncentivesAmount:     rule.MoneyIncentivesAmount,
			MoneyIncentivesStage:      rule.MoneyIncentivesStage,
			MoneyIncentivesStageCN:    stageString,
			MoneyIncentivesStageEnd:   rule.MoneyIncentivesStageEnd,
			MoneyIncentivesStageStart: rule.MoneyIncentivesStageStart,
			MoneyIncentivesTime:       rule.MoneyIncentivesTime.Local(),
			ReferrerPercentage:        rule.ReferrerPercentage,
			SalesmanPercentage:        rule.SalesmanPercentage,
			Org:                       rule.Org,
			Company:                   rule.Company,
			UpdatedAt:                 rule.UpdatedAt,
			DeletedAt:                 rule.DeletedAt,
			CreatedAt:                 rule.CreatedAt,
			Remarks:                   rule.Remarks,
		})
	}
	// 相关人列表
	var relevantPeopleDomain []*domain.Relevant
	for _, relevant := range relevantPeople {
		relevantPeopleDomain = append(relevantPeopleDomain, &domain.Relevant{
			RelevantId:                relevant.CooperationContractRelevantId,
			CooperationContractNumber: relevant.CooperationContractNumber,
			UserId:                    relevant.UserId,
			UserBaseId:                relevant.UserBaseId,
			Org:                       relevant.Org,
			Orgs:                      relevant.Orgs,
			Department:                relevant.Department,
			Roles:                     relevant.Roles,
			UserInfo:                  relevant.UserInfo,
			UserType:                  relevant.UserType,
			Status:                    relevant.Status,
			Company:                   relevant.Company,
		})
	}
	// 承接人列表
	var undertakersDomain []*domain.Undertaker
	for _, undertaker := range undertakers {
		undertakersDomain = append(undertakersDomain, &domain.Undertaker{
			UndertakerId:              undertaker.CooperationContractUndertakerId,
			CooperationContractNumber: undertaker.CooperationContractNumber,
			CooperationContractId:     undertaker.CooperationContractId,
			UserId:                    undertaker.UserId,
			UserBaseId:                undertaker.UserBaseId,
			Org:                       undertaker.Org,
			Orgs:                      undertaker.Orgs,
			Department:                undertaker.Department,
			Roles:                     undertaker.Roles,
			Referrer:                  undertaker.Referrer,
			Salesman:                  undertaker.Salesman,
			UserInfo:                  undertaker.UserInfo,
			UserType:                  undertaker.UserType,
			Status:                    undertaker.Status,
			Company:                   undertaker.Company,
			ContractAttachment:        undertaker.ContractAttachment,
		})
	}
	return &domain.CooperationContract{
		CooperationContractId:              cooperationContractModel.CooperationContractId,
		CooperationContractDescription:     cooperationContractModel.CooperationContractDescription,
		CooperationContractName:            cooperationContractModel.CooperationContractName,
		CooperationContractNumber:          cooperationContractModel.CooperationContractNumber,
		CooperationProjectNumber:           cooperationContractModel.CooperationProjectNumber,
		CooperationContractUndertakerTypes: cooperationContractModel.CooperationContractUndertakerTypes,
		CooperationContractSponsor:         cooperationContractModel.CooperationContractSponsor,
		CooperationMode: &domain.CooperationMode{
			CooperationModeId:     cooperationMode.CooperationModeId,
			CooperationModeNumber: cooperationMode.CooperationModeNumber,
			CooperationModeName:   cooperationMode.CooperationModeName,
			Status:                cooperationMode.Status,
			Org:                   cooperationMode.Org,
			Company:               cooperationMode.Company,
			Remarks:               cooperationMode.Remarks,
			Operator:              cooperationMode.Operator,
			OperateTime:           cooperationMode.OperateTime,
			UpdatedAt:             cooperationMode.UpdatedAt,
			DeletedAt:             cooperationMode.DeletedAt,
			CreatedAt:             cooperationMode.CreatedAt,
		},
		DividendsIncentivesRules: dividendsIncentivesRulesDomain,
		MoneyIncentivesRules:     moneyIncentivesRulesDomain,
		RelevantPeople:           relevantPeopleDomain,
		Undertakers:              undertakersDomain,
		Status:                   cooperationContractModel.Status,
		IncentivesType:           cooperationContractModel.IncentivesType,
		Org:                      cooperationContractModel.Org,
		Company:                  cooperationContractModel.Company,
		Department:               cooperationContractModel.Department,
		Operator:                 cooperationContractModel.Operator,
		OperateTime:              cooperationContractModel.OperateTime,
		CreatedAt:                cooperationContractModel.CreatedAt,
		DeletedAt:                cooperationContractModel.DeletedAt,
		UpdatedAt:                cooperationContractModel.UpdatedAt,
		CooperationProjectId:     cooperationContractModel.CooperationProjectId,
	}, nil
}