wip, need to test
This commit is contained in:
@@ -4,9 +4,15 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
evs "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
||||
evscl "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-control-letter"
|
||||
egc "simrs-vx/internal/domain/main-entities/general-consent"
|
||||
|
||||
uvs "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep"
|
||||
uvscl "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep-control-letter"
|
||||
ugc "simrs-vx/internal/use-case/main-use-case/general-consent"
|
||||
|
||||
pc "simrs-vx/pkg/conv-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
|
||||
@@ -25,6 +31,8 @@ func Generate(input GenerateDto) (*d.Data, error) {
|
||||
Source: source,
|
||||
}
|
||||
|
||||
var response ResponseDto
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
|
||||
@@ -32,7 +40,7 @@ func Generate(input GenerateDto) (*d.Data, error) {
|
||||
// general-consent
|
||||
case ere.DTCGC:
|
||||
// get value from general consent by ref_id
|
||||
gc, err := ugc.ReadDetailData(egc.ReadDetailDto{Id: *input.Ref_Id}, &event)
|
||||
gc, err := ugc.ReadDetailData(egc.ReadDetailDto{Id: uint(*pc.StringToUint64(*input.Ref_Id))}, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -75,20 +83,89 @@ func Generate(input GenerateDto) (*d.Data, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
response := ResponseDto{
|
||||
response = ResponseDto{
|
||||
FileUrl: urlPub,
|
||||
}
|
||||
|
||||
// control-letter
|
||||
case ere.DTCVSCL:
|
||||
// get value from control letter by ref_id
|
||||
cl, err := uvscl.ReadDetailData(evscl.ReadDetailDto{Number: input.Ref_Id}, &event)
|
||||
if err != nil {
|
||||
if !pu.IsDataNotFoundError(err) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if cl != nil && cl.FileUrl != nil {
|
||||
if err := removeFile(string(input.EntityType_Code), *cl.FileUrl); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// map template data
|
||||
clData := VclaimControlLetter{}
|
||||
if input.Data != nil {
|
||||
err := json.Unmarshal([]byte(*input.Data), &clData)
|
||||
if err != nil {
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-unmarshal-fail",
|
||||
Detail: err.Error(),
|
||||
Raw: err,
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
return nil, errors.New("there is no data to be used")
|
||||
}
|
||||
|
||||
if cl == nil {
|
||||
createCL := evscl.CreateDto{
|
||||
VclaimSep_Number: &clData.VclaimSep.Number,
|
||||
Number: &clData.Number,
|
||||
Value: input.Data,
|
||||
}
|
||||
if cl, err = uvscl.CreateData(createCL, &event); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
}
|
||||
// get encounter id by vclaim sep number
|
||||
vs, err := uvs.ReadDetailData(evs.ReadDetailDto{Number: &clData.VclaimSep.Number}, &event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
input.FormatType = erc.DFTCPDF
|
||||
input.TemplateName = TDNCL
|
||||
input.Encounter_Id = vs.Encounter_Id
|
||||
|
||||
templateData := clData.generateTemplateData()
|
||||
// generate file
|
||||
urlPub, err := generateFile(input, templateData)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cl.FileUrl = &urlPub
|
||||
if err := dg.I.Save(&cl).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")
|
||||
}
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.II{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "created",
|
||||
},
|
||||
Data: response,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
package generatefile
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
ere "simrs-vx/internal/domain/references/encounter"
|
||||
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
)
|
||||
|
||||
type GeneralConsentPDF struct {
|
||||
@@ -14,18 +19,34 @@ type GeneralConsentPDF struct {
|
||||
Date string `json:"date"`
|
||||
}
|
||||
|
||||
type ControlLetterPDF struct {
|
||||
Number string
|
||||
Doctor_Name string
|
||||
DstUnit_Name string
|
||||
CardNumber string
|
||||
Name string
|
||||
BirthDate string
|
||||
Diagnose string
|
||||
PlanDate string
|
||||
ResponsibleDoctor_Name string
|
||||
PrintDate string
|
||||
}
|
||||
|
||||
type GenerateDto struct {
|
||||
EntityType_Code ere.EntityTypeCode `json:"entityType_code" validate:"required"`
|
||||
Ref_Id *uint `json:"ref_id" validate:"required"`
|
||||
Ref_Id *string `json:"ref_id" validate:"required"`
|
||||
Type_Code ere.DocTypeCode `json:"type_code" validate:"required"`
|
||||
FormatType erc.DocFormatTypeCode `json:"formatType"`
|
||||
TemplateName TemplateDocsName `json:"-"`
|
||||
Encounter_Id *uint `json:"-"`
|
||||
|
||||
Data *string `json:"data"`
|
||||
}
|
||||
|
||||
type VclaimControlLetter struct {
|
||||
Number string `json:"noSuratKontrol"`
|
||||
Date string `json:"tglRencanaKontrol"`
|
||||
PlannedControlDate string `json:"tglRencanaKontrol"`
|
||||
IssuedDate string `json:"tglTerbit"`
|
||||
Doctor_Name string `json:"namaDokter"`
|
||||
DstUnit_Name string `json:"namaPoliTujuan"`
|
||||
ResponsibleDoctor_Name string `json:"namaDokterPembuat"`
|
||||
@@ -60,4 +81,40 @@ type TemplateDocsName string
|
||||
// TemplateDocsName is the name of the template file in the assets/docs folder
|
||||
const (
|
||||
TDNGC TemplateDocsName = "general-consent.html"
|
||||
TDNCL TemplateDocsName = "control-letter.html"
|
||||
)
|
||||
|
||||
func (v VclaimControlLetter) generateTemplateData() ControlLetterPDF {
|
||||
|
||||
return ControlLetterPDF{
|
||||
Number: v.Number,
|
||||
Doctor_Name: v.Doctor_Name,
|
||||
DstUnit_Name: v.DstUnit_Name,
|
||||
CardNumber: v.VclaimSep.VclaimMember.CardNumber,
|
||||
Name: v.generateNameWithGender(),
|
||||
BirthDate: v.generateBirthDate(),
|
||||
Diagnose: v.VclaimSep.Diagnose,
|
||||
PlanDate: v.PlannedControlDate,
|
||||
ResponsibleDoctor_Name: v.ResponsibleDoctor_Name,
|
||||
PrintDate: generatePrintDate(),
|
||||
}
|
||||
}
|
||||
|
||||
func (v VclaimControlLetter) generateNameWithGender() string {
|
||||
gender := "Perempuan"
|
||||
if v.VclaimSep.VclaimMember.Gender == "L" {
|
||||
gender = "Laki-Laki"
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s (%s)", v.VclaimSep.VclaimMember.Name, gender)
|
||||
}
|
||||
|
||||
func (v VclaimControlLetter) generateBirthDate() string {
|
||||
t, _ := time.Parse("2006-01-02", v.VclaimSep.VclaimMember.BirthDate)
|
||||
return pu.FormatIndonesianDate(t)
|
||||
}
|
||||
|
||||
func generatePrintDate() string {
|
||||
now := time.Now()
|
||||
return now.Format("2006/01/02")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user