95 lines
2.0 KiB
Go
95 lines
2.0 KiB
Go
package generatefile
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
egc "simrs-vx/internal/domain/main-entities/general-consent"
|
|
ugc "simrs-vx/internal/use-case/main-use-case/general-consent"
|
|
|
|
pl "simrs-vx/pkg/logger"
|
|
pu "simrs-vx/pkg/use-case-helper"
|
|
|
|
dg "github.com/karincake/apem/db-gorm-pg"
|
|
d "github.com/karincake/dodol"
|
|
|
|
erc "simrs-vx/internal/domain/references/common"
|
|
ere "simrs-vx/internal/domain/references/encounter"
|
|
)
|
|
|
|
const source = "generate-file"
|
|
|
|
func Generate(input GenerateDto) (*d.Data, error) {
|
|
event := pl.Event{
|
|
Feature: "Generate",
|
|
Source: source,
|
|
}
|
|
|
|
// Start log
|
|
pl.SetLogInfo(&event, input, "started", "create")
|
|
|
|
switch input.Type_Code {
|
|
// general-consent
|
|
case ere.DTCGC:
|
|
// get value from general consent by ref_id
|
|
gc, err := ugc.ReadDetailData(egc.ReadDetailDto{Id: *input.Ref_Id}, &event)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if gc.FileUrl != nil {
|
|
if err := removeFile(string(input.EntityType_Code), *gc.FileUrl); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
// map template data
|
|
templateData := GeneralConsentPDF{}
|
|
if gc.Value != nil {
|
|
err := json.Unmarshal([]byte(*gc.Value), &templateData)
|
|
if err != nil {
|
|
event.ErrInfo = pl.ErrorInfo{
|
|
Code: "data-unmarshal-fail",
|
|
Detail: err.Error(),
|
|
Raw: err,
|
|
}
|
|
return nil, err
|
|
}
|
|
} else {
|
|
return nil, errors.New("no value in this general consent")
|
|
}
|
|
|
|
input.FormatType = erc.DFTCPDF
|
|
input.TemplateName = TDNGC
|
|
input.Encounter_Id = gc.Encounter_Id
|
|
templateData.Date = pu.FormatIndonesianDate(gc.CreatedAt)
|
|
|
|
// generate file
|
|
urlPub, err := generateFile(input, templateData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
gc.FileUrl = &urlPub
|
|
if err := dg.I.Save(&gc).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response := ResponseDto{
|
|
FileUrl: urlPub,
|
|
}
|
|
|
|
return &d.Data{
|
|
Meta: d.II{
|
|
"source": source,
|
|
"structure": "single-data",
|
|
"status": "created",
|
|
},
|
|
Data: response,
|
|
}, nil
|
|
default:
|
|
return nil, errors.New("invalid type code")
|
|
}
|
|
|
|
}
|