lib/app/company-services.go

109 lines
3.5 KiB
Go

package app
import (
"fmt"
"code.tnxs.net/taxnexus/lib/api/crm/crm_client/companies"
)
// GetCompany is a first class object retrieval function
func GetCompany(id string, principal *User) *Company {
if id == "" {
return nil
}
c, ok := companyCache.get(id)
if ok {
return c
}
c, err := GetCompanyByID(id, principal)
if err != nil {
return nil
}
return c
}
// GetCompanyByID is a first class object retrieval function
func GetCompanyByID(key string, principal *User) (*Company, error) {
sugar.Debugf("app.getCompanyByID: 📥")
if key == "" {
return nil, fmt.Errorf("app.getCompanyByID: 💣 ⛔ key is blank")
}
cacheObj, ok := companyCache.get(key)
if ok {
sugar.Debugf("app.getCompanyByID: 👍 🎯 📤")
return cacheObj, nil
}
params := companies.NewGetCompaniesParamsWithTimeout(getTimeout)
params.CompanyID = &key
response, err := crmClient.Companies.GetCompanies(params, principal.Auth)
if err != nil {
return nil, err
}
var obj *Company
for _, itm := range response.Payload.Data { // single iteration execution
obj = UnMarshalCompany(itm, principal)
}
finalObj := obj.Enrich(principal)
companyCache.put(key, finalObj)
sugar.Debugf("app.getCompanyByID: 👍 🆕 📤")
return finalObj, nil
}
const defaultCompanyID = "6ff8326f-79b7-40ae-afc7-390eca182b1b" // todo #3 Don't hardcode company ID
// GetDefaultCompany returns the default company
func GetDefaultCompany(principal *User) *Company {
return GetCompany(defaultCompanyID, principal)
}
// Enrich adds subordinate objects to a first class object and returns a copy
func (obj *Company) Enrich(principal *User) *Company {
return &Company{
ID: obj.ID,
Account: GetAccount(obj.AccountID, principal),
AccountID: obj.AccountID,
AccountNumberPrefix: obj.AccountNumberPrefix,
AdvancePeriodID: obj.AdvancePeriodID,
BillingAddress: obj.BillingAddress,
BillingAdvice: obj.BillingAdvice,
BillingContactID: obj.BillingContactID,
BillingContact: GetContact(obj.BillingContactID, principal),
BillingEmail: obj.BillingEmail,
BillingPhone: obj.BillingPhone,
BillingWebsite: obj.BillingWebsite,
CoaTemplateID: obj.CoaTemplateID,
ColorAccent1: obj.ColorAccent1,
ColorAccent2: obj.ColorAccent2,
ColorPrimary: obj.ColorPrimary,
ClosedPeriodID: obj.ClosedPeriodID,
CreatedByID: obj.CreatedByID,
CreatedDate: obj.CreatedDate,
CurrentPeriodID: obj.CurrentPeriodID,
CurrentPeriodStatus: obj.CurrentPeriodStatus,
CustomerSuccessID: obj.CustomerSuccessID,
CustomerSuccess: GetContact(obj.CustomerSuccessID, principal),
DateClosed: obj.DateClosed,
DefaultAddress: obj.DefaultAddress,
DefaultCompany: obj.DefaultCompany,
FontBody: obj.FontBody,
FontHeading: obj.FontHeading,
FontHeadingNarrow: obj.FontHeadingNarrow,
FontLink: obj.FontLink,
FontMono: obj.FontMono,
International: obj.International,
LastAccountNumber: obj.LastAccountNumber,
LastModifiedByID: obj.LastModifiedByID,
LastModifiedDate: obj.LastModifiedDate,
LastTaxtypeNumber: obj.LastTaxtypeNumber,
Logo: obj.Logo,
Name: obj.Name,
OwnerID: obj.OwnerID,
Preparer: GetContact(obj.PreparerID, principal),
PreparerID: obj.PreparerID,
PricebookID: obj.PricebookID,
TenantID: obj.TenantID,
UserTechLead: GetContact(obj.UserTechLeadID, principal),
UserTechLeadID: obj.UserTechLeadID,
}
}