Set organization (district) for compliance reports from mailer
This commit is contained in:
parent
78458760ec
commit
b5923137a7
3 changed files with 54 additions and 11 deletions
|
|
@ -6,6 +6,7 @@ import (
|
|||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/Gleipnir-Technology/bob"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql"
|
||||
"github.com/Gleipnir-Technology/bob/dialect/psql/sm"
|
||||
"github.com/Gleipnir-Technology/nidus-sync/db"
|
||||
|
|
@ -16,6 +17,7 @@ import (
|
|||
"github.com/aarondl/opt/omit"
|
||||
"github.com/aarondl/opt/omitnull"
|
||||
//"github.com/rs/zerolog/log"
|
||||
"github.com/stephenafamo/scan"
|
||||
)
|
||||
|
||||
func ComplianceRequestMailerCreate(ctx context.Context, user User, site_id int32) (int32, error) {
|
||||
|
|
@ -133,3 +135,23 @@ func ComplianceReportRequestFromPublicID(ctx context.Context, public_id string)
|
|||
}
|
||||
return types.ComplianceReportRequestFromModel(row), nil
|
||||
}
|
||||
func OrganizationIDForComplianceReportRequest(ctx context.Context, public_id string) (int32, error) {
|
||||
type _Row struct {
|
||||
ID int32 `db:"organization_id"`
|
||||
}
|
||||
row, err := bob.One(ctx, db.PGInstance.BobDB, psql.Select(
|
||||
sm.Columns(
|
||||
models.Sites.Columns.OrganizationID,
|
||||
),
|
||||
sm.From(models.ComplianceReportRequests.NameAs()),
|
||||
sm.InnerJoin(models.Leads.NameAs()).On(
|
||||
models.ComplianceReportRequests.Columns.LeadID.EQ(models.Leads.Columns.ID)),
|
||||
sm.InnerJoin(models.Sites.NameAs()).On(
|
||||
models.Leads.Columns.SiteID.EQ(models.Sites.Columns.ID)),
|
||||
sm.Where(models.ComplianceReportRequests.Columns.PublicID.EQ(psql.Arg(public_id))),
|
||||
), scan.StructMapper[_Row]())
|
||||
if err != nil {
|
||||
return 0, fmt.Errorf("query compliance report request")
|
||||
}
|
||||
return row.ID, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@ func compliance(ctx context.Context, public_id string, report *types.PublicRepor
|
|||
models.PublicreportCompliances.Columns.ReportPhoneCanText,
|
||||
models.PublicreportCompliances.Columns.WantsScheduled,
|
||||
),
|
||||
sm.From(psql.Quote("publicreport", "compliance")).As("publicreport.compliance"),
|
||||
//sm.From(psql.Quote("publicreport", "compliance")).As("publicreport.compliance"),
|
||||
sm.From(models.PublicreportCompliances.NameAs()),
|
||||
sm.Where(models.PublicreportCompliances.Columns.ReportID.EQ(
|
||||
psql.Arg(report.ID),
|
||||
)),
|
||||
|
|
|
|||
|
|
@ -58,12 +58,32 @@ func (res *complianceR) ByID(ctx context.Context, r *http.Request, query QueryPa
|
|||
return res.complianceHydrate(report)
|
||||
}
|
||||
func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicreportComplianceForm) (*types.PublicReportCompliance, *nhttp.ErrorWithStatus) {
|
||||
if n.District.IsUnset() {
|
||||
return nil, nhttp.NewBadRequest("You must provide a district_id")
|
||||
if n.District.IsUnset() && n.MailerID.IsUnset() {
|
||||
return nil, nhttp.NewBadRequest("You must provide a district_id or mailer_id")
|
||||
}
|
||||
district_id, err := res.router.IDFromURI("district.ByIDGet", n.District.MustGet())
|
||||
if err != nil || district_id == nil {
|
||||
return nil, nhttp.NewBadRequest("parse district ID: %w", err)
|
||||
var district_id int32
|
||||
var err error
|
||||
var public_id string
|
||||
if n.District.IsValue() {
|
||||
district_str := n.District.MustGet()
|
||||
var district_id_ptr *int
|
||||
district_id_ptr, err = res.router.IDFromURI("district.ByIDGet", district_str)
|
||||
if err != nil || district_id_ptr == nil {
|
||||
return nil, nhttp.NewBadRequest("parse district ID: %w", err)
|
||||
}
|
||||
district_id = int32(*district_id_ptr)
|
||||
public_id, err = platform.GenerateReportID()
|
||||
if err != nil {
|
||||
return nil, nhttp.NewError("generate public ID: %w", err)
|
||||
}
|
||||
}
|
||||
if n.MailerID.IsValue() {
|
||||
public_id = n.MailerID.MustGet()
|
||||
org_id, err := platform.OrganizationIDForComplianceReportRequest(ctx, public_id)
|
||||
if err != nil {
|
||||
return nil, nhttp.NewBadRequest("no such mailer")
|
||||
}
|
||||
district_id = org_id
|
||||
}
|
||||
user_agent := r.Header.Get("User-Agent")
|
||||
err = platform.EnsureClient(ctx, n.ClientID, user_agent)
|
||||
|
|
@ -80,10 +100,10 @@ func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicrep
|
|||
LatlngAccuracyType: omit.From(enums.PublicreportAccuracytypeBrowser),
|
||||
LatlngAccuracyValue: omit.From(float32(0.0)),
|
||||
//Location: omitnull.From(fmt.Sprintf("ST_GeometryFromText(Point(%s %s))", longitude, latitude)),
|
||||
Location: omitnull.FromPtr[string](nil),
|
||||
MapZoom: omit.From(float32(0.0)),
|
||||
//OrganizationID: omit.From[int32](int32(*district_id)),
|
||||
PublicID: n.MailerID,
|
||||
Location: omitnull.FromPtr[string](nil),
|
||||
MapZoom: omit.From(float32(0.0)),
|
||||
OrganizationID: omit.From[int32](district_id),
|
||||
PublicID: omit.From(public_id),
|
||||
ReporterEmail: omit.From(""),
|
||||
ReporterName: omit.From(""),
|
||||
ReporterPhone: omit.From(""),
|
||||
|
|
@ -101,7 +121,7 @@ func (res *complianceR) Create(ctx context.Context, r *http.Request, n publicrep
|
|||
//ReportID omit.Val[int32]
|
||||
WantsScheduled: omitnull.FromPtr[bool](nil),
|
||||
}
|
||||
report, err := platform.PublicReportComplianceCreate(ctx, setter_report, setter_compliance, int32(*district_id))
|
||||
report, err := platform.PublicReportComplianceCreate(ctx, setter_report, setter_compliance, district_id)
|
||||
if err != nil {
|
||||
return nil, nhttp.NewError("create compliance report: %w", err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue