add insert data nonlab template

This commit is contained in:
2024-06-05 15:14:59 +07:00
parent 897bdc176c
commit 709fcb316d
7 changed files with 956 additions and 42 deletions

View File

@@ -6,6 +6,7 @@ import (
dbx "cpone/package/database"
"fmt"
"math"
"strconv"
"strings"
"go.uber.org/zap"
@@ -133,3 +134,225 @@ func (nlt *MDNonlabTemplateServices) DeleteDataNonlabTemplate(id string) (models
return nlt.GetMDNonlabTemplateByID(id)
}
func (nlt *MDNonlabTemplateServices) AddNonlabTemplate(nama string, fisik string) (models.MDNonlabTemplate, error) {
logger, _ := zap.NewProduction()
var ret models.MDNonlabTemplate
var count int
var prmName = "%" + nama + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
`
err := dbx.Handlex.Get(&count, q, prmName)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("duplicate data", zap.Any("nama", nama))
return ret, fmt.Errorf("duplicate nama")
}
q = `
INSERT INTO nonlab_template (
NonlabTemplateName,
NonlabTemplateFlagFisik,
NonlabTemplateCreated,
NonlabTemplateCreatedUserID
) VALUES (?,?,NOW(),1);
`
rsp := dbx.Handlex.MustExec(q, nama, fisik)
insertedID, err := rsp.LastInsertId()
if err != nil {
defer logger.Sync()
logger.Error("error insert data", zap.Any("nama", nama))
return ret, fmt.Errorf("failed insert data: %v", err)
}
s := strconv.Itoa(int(insertedID))
return nlt.GetMDNonlabTemplateByID(s)
}
func (nlt *MDNonlabTemplateServices) UpdateNonlabTemplate(id string, nama string, fisik string) (models.MDNonlabTemplate, error) {
logger, _ := zap.NewProduction()
var ret models.MDNonlabTemplate
var count int
var prmNama = "%" + nama + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
AND NonlabTemplateID <> ?
`
err := dbx.Handlex.Get(&count, q, prmNama, id)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("nama", prmNama))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("duplicate data", zap.Any("nama", nama))
return ret, fmt.Errorf("duplicate nama")
}
q = `
UPDATE nonlab_template SET
NonlabTemplateName = ?,
NonlabTemplateFlagFisik = ?,
NonlabTemplateLastUpdated = NOW(),
NonlabTemplateLastUpdatedUserID = 1
WHERE NonlabTemplateID = ?;
`
respUpdt := dbx.Handlex.MustExec(q, nama, fisik, id)
_, err = respUpdt.RowsAffected()
if err != nil {
defer logger.Sync()
logger.Error("error update data", zap.Any("name", nama))
return ret, fmt.Errorf("query failed to update data")
}
return nlt.GetMDNonlabTemplateByID(id)
}
func (nlt *MDNonlabTemplateServices) GetIDNonlabTemplate(name string) (int, error) {
logger, _ := zap.NewProduction()
var ret int
prmName := "%" + name + "%"
q := `
SELECT
NonlabTemplateID
FROM nonlab_template
WHERE NonlabTemplateName LIKE ?
AND NonlabTemplateIsActive = 'Y'
`
err := dbx.Handlex.Get(&ret, q, prmName)
if err != nil {
defer logger.Sync()
logger.Error("Error get data non lab template by id vs",
zap.String("name", prmName),
zap.Error(err),
)
return ret, fmt.Errorf("QUERY FAILED GET DATA BY NAME")
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) GetDetailByIDNonlabTemplate(id string) (models.NonlabTemplateDetail, error) {
logger, _ := zap.NewProduction()
var ret models.NonlabTemplateDetail
q := `
SELECT
NonlabTemplateDetailID,
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetaiNat_UnitID,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetaiM_LangID,
NonlabTemplateDetailIsActive
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
err := dbx.Handlex.Get(&ret, q, id)
if err != nil {
defer logger.Sync()
logger.Error("Error get data detail nonlab template", zap.Any("ID", id))
return ret, fmt.Errorf("query failed, error get data by id : %v", err)
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) ListDetailByIDNonlabTemplate(id string) ([]models.NonlabTemplateDetail, error) {
var ret []models.NonlabTemplateDetail
var totalData int
query := `
SELECT COUNT(*)
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
if err := dbx.Handlex.Get(&totalData, query, id); err != nil {
return ret, fmt.Errorf("error querying databases: %v", err)
}
query = `
SELECT
NonlabTemplateDetailID,
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetaiNat_UnitID,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetaiM_LangID,
NonlabTemplateDetailIsActive
FROM nonlab_template_detail
WHERE NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
if err := dbx.Handlex.Select(&ret, query, id); err != nil {
return ret, fmt.Errorf("error querying database: %v", err)
}
return ret, nil
}
func (nlt *MDNonlabTemplateServices) AddDetailNonlabTemplate(idnonlab string, kode string, name string, flagActive string) (models.NonlabTemplateDetail, error) {
logger, _ := zap.NewProduction()
var ret models.NonlabTemplateDetail
var count int
prmKode := "%" + kode + "%"
prmName := "%" + name + "%"
q := `
SELECT COUNT(*)
FROM nonlab_template_detail
WHERE (NonlabTemplateDetailCode LIKE ? OR NonlabTemplateDetailName LIKE ?)
AND NonlabTemplateDetailNonlabTemplateID = ?
AND NonlabTemplateDetailIsActive = 'Y'
`
err := dbx.Handlex.Get(&count, q, prmKode, prmName, idnonlab)
if err != nil {
defer logger.Sync()
logger.Error("cek duplicate", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to cek duplicate: %v", err)
}
if count > 0 {
defer logger.Sync()
logger.Error("data duplicate", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("terdapat data duplikat")
}
q = `
INSERT INTO nonlab_template_detail (
NonlabTemplateDetailNonlabTemplateID,
NonlabTemplateDetailCode,
NonlabTemplateDetailName,
NonlabTemplateDetailFlagActive,
NonlabTemplateDetailCreated
) VALUES(?,?,?,?,NOW())
`
rsp := dbx.Handlex.MustExec(q, idnonlab, kode, name, flagActive)
insertedID, err := rsp.LastInsertId()
if err != nil {
defer logger.Sync()
logger.Error("error insert data", zap.Any("kode", prmKode), zap.Any("nama", prmName))
return ret, fmt.Errorf("query failed to insert data: %v", err)
}
s := strconv.Itoa(int(insertedID))
return nlt.GetDetailByIDNonlabTemplate(s)
}