Organizations update
This commit is contained in:
@@ -20,6 +20,63 @@ func newOrganizationRepo(conn executor) *organizationRepo {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) getProfileQuery(user entity.User) (query string, where string, err error) {
|
||||
if len(user.Profiles) > 0 {
|
||||
for _, p := range user.Profiles {
|
||||
switch p.Key {
|
||||
case "AD", "BCBSIAD", "BDCAD", "PLANAD":
|
||||
switch p.Organization.Type.Key {
|
||||
case "techsupport", "bcbsi", "bcbsa":
|
||||
return
|
||||
case "plan":
|
||||
query = ` INNER JOIN tab_provider e
|
||||
ON e.provider_id = a.organization_reference_id
|
||||
AND b.organization_type_key = 'plan'
|
||||
LEFT JOIN tab_organization f
|
||||
ON f.organization_id = a.organization_parent_id `
|
||||
where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID)
|
||||
case "provider":
|
||||
query = ` INNER JOIN tab_provider e
|
||||
ON e.provider_id = a.organization_reference_id
|
||||
AND b.organization_type_key = 'provider'
|
||||
LEFT JOIN tab_organization f
|
||||
ON f.organization_id = a.organization_parent_id `
|
||||
where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID)
|
||||
return
|
||||
}
|
||||
case "SP", "SPT":
|
||||
switch p.Organization.Type.Key {
|
||||
case "techsupport", "bcbsi", "bcbsa":
|
||||
return
|
||||
case "plan":
|
||||
query = ` INNER JOIN tab_provider e
|
||||
ON e.provider_id = a.organization_reference_id
|
||||
AND b.organization_type_key = 'plan'
|
||||
LEFT JOIN tab_organization f
|
||||
ON f.organization_id = a.organization_parent_id `
|
||||
where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID)
|
||||
case "provider":
|
||||
query = ` INNER JOIN tab_provider e
|
||||
ON e.provider_id = a.organization_reference_id
|
||||
AND b.organization_type_key = 'provider'
|
||||
LEFT JOIN tab_organization f
|
||||
ON f.organization_id = a.organization_parent_id `
|
||||
where = fmt.Sprintf(` AND (a.organization_uuid = '%s' OR f.organization_uuid = '%s') `, p.Organization.UUID, p.Organization.UUID)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if query == "" && where == "" {
|
||||
return "", "", fmt.Errorf("Invalid Query")
|
||||
} else {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return "", "", fmt.Errorf("User has no profile to search")
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) getQuery() string {
|
||||
const (
|
||||
query = `SELECT
|
||||
@@ -237,42 +294,73 @@ func (c *organizationRepo) GetAllTypes() ([]entity.OrganizationType, error) {
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetTypeByKey(key string) (entity.OrganizationType, error) {
|
||||
return c.parseTypeEntity(c.conn.QueryRow(c.getTypeQuery()+" WHERE organization_type_key=?", key))
|
||||
return c.parseTypeEntity(c.conn.QueryRow(c.getTypeQuery()+" WHERE b.organization_type_key=?", key))
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetByType(organizationTypeKey string) ([]entity.Organization, error) {
|
||||
func (c *organizationRepo) GetByType(organizationTypeKey string, user entity.User) ([]entity.Organization, error) {
|
||||
query, where, err := c.getProfileQuery(user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if organizationTypeKey == "" {
|
||||
return c.parseSet(c.conn.Query(c.getQuery()))
|
||||
return c.parseSet(c.conn.Query(c.getQuery() + query + " WHERE 1 = 1 " + where))
|
||||
} else {
|
||||
return c.parseSet(c.conn.Query(c.getQuery()+" WHERE b.organization_type_key = ? ", organizationTypeKey))
|
||||
return c.parseSet(c.conn.Query(c.getQuery()+query+" WHERE b.organization_type_key = ? "+where, organizationTypeKey))
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetByName(name string, searchType string) ([]entity.Organization, error) {
|
||||
finalQuery := c.getQuery() + " WHERE a.organization_name LIKE ?"
|
||||
func (c *organizationRepo) GetByName(name string, searchType string, user entity.User) ([]entity.Organization, error) {
|
||||
query, where, err := c.getProfileQuery(user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
finalQuery := c.getQuery() + query + " WHERE a.organization_name LIKE ? "
|
||||
switch searchType {
|
||||
case "parent":
|
||||
finalQuery += " AND a.organization_parent_id > 0; "
|
||||
finalQuery += " AND a.organization_parent_id > 0 "
|
||||
case "child":
|
||||
finalQuery += " AND a.organization_parent_id = 0; "
|
||||
finalQuery += " AND a.organization_parent_id = 0 "
|
||||
}
|
||||
name = "%" + name + "%"
|
||||
|
||||
fmt.Println(finalQuery)
|
||||
finalQuery += where
|
||||
name = "%" + name + "%"
|
||||
|
||||
return c.parseSet(c.conn.Query(finalQuery, name))
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetByUUID(organizationUUID string) (entity.Organization, error) {
|
||||
return c.parseEntity(c.conn.QueryRow(c.getQuery()+" WHERE a.organization_uuid = ? ", organizationUUID))
|
||||
func (c *organizationRepo) GetByUUID(organizationUUID string, user entity.User) (entity.Organization, error) {
|
||||
query, where, err := c.getProfileQuery(user)
|
||||
if err != nil {
|
||||
return entity.Organization{}, err
|
||||
}
|
||||
|
||||
query = c.getQuery() + query + " WHERE a.organization_uuid = ? " + where
|
||||
|
||||
return c.parseEntity(c.conn.QueryRow(query, organizationUUID))
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetByID(organizationID int64) (entity.Organization, error) {
|
||||
return c.parseEntity(c.conn.QueryRow(c.getQuery()+" WHERE a.organization_id = ? ", organizationID))
|
||||
func (c *organizationRepo) GetByID(organizationID int64, user entity.User) (entity.Organization, error) {
|
||||
query, where, err := c.getProfileQuery(user)
|
||||
if err != nil {
|
||||
return entity.Organization{}, err
|
||||
}
|
||||
|
||||
query = c.getQuery() + query + " WHERE a.organization_id = ? " + where
|
||||
|
||||
return c.parseEntity(c.conn.QueryRow(query, organizationID))
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetChildsByID(organizationID int64) ([]entity.Organization, error) {
|
||||
return c.parseSet(c.conn.Query(c.getQuery()+" WHERE a.organization_parent_id = ? ", organizationID))
|
||||
func (c *organizationRepo) GetChildsByID(organizationID int64, user entity.User) ([]entity.Organization, error) {
|
||||
query, where, err := c.getProfileQuery(user)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
query = c.getQuery() + query + " WHERE a.organization_parent_id = ? " + where
|
||||
|
||||
return c.parseSet(c.conn.Query(query, organizationID))
|
||||
}
|
||||
|
||||
func (c *organizationRepo) GetContactsByOrganizationUUID(organizationUUID string) ([]entity.OrganizationContact, error) {
|
||||
@@ -312,7 +400,7 @@ func (c *organizationRepo) SetParentOrganization(organizationID int64, parentOrg
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) InactivateOrganizationAddress(address entity.OrganizationAddress) error {
|
||||
func (c *organizationRepo) InactivateOrganizationAddress(address entity.OrganizationAddress, user entity.User) error {
|
||||
const (
|
||||
query = "UPDATE tab_organization_address SET active = 0, updated = CURRENT_TIMESTAMP, updated_user_id = ? WHERE organization_id = ? and organization_address_uuid = ?"
|
||||
)
|
||||
@@ -321,7 +409,7 @@ func (c *organizationRepo) InactivateOrganizationAddress(address entity.Organiza
|
||||
return errors.NewNotFoundError()
|
||||
}
|
||||
|
||||
organization, err := c.GetByUUID(address.Organization.UUID)
|
||||
organization, err := c.GetByUUID(address.Organization.UUID, user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -334,7 +422,7 @@ func (c *organizationRepo) InactivateOrganizationAddress(address entity.Organiza
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) SetOrganizationAddress(address entity.OrganizationAddress) (entity.OrganizationAddress, error) {
|
||||
func (c *organizationRepo) SetOrganizationAddress(address entity.OrganizationAddress, user entity.User) (entity.OrganizationAddress, error) {
|
||||
const (
|
||||
query = "INSERT INTO tab_organization_address(organization_address_uuid, organization_id, internal_id, `name`, address, `desc`, lat, `long`, created_user_id, updated_user_id) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
|
||||
)
|
||||
@@ -343,7 +431,7 @@ func (c *organizationRepo) SetOrganizationAddress(address entity.OrganizationAdd
|
||||
return entity.OrganizationAddress{}, errors.NewNotFoundError()
|
||||
}
|
||||
|
||||
organization, err := c.GetByUUID(address.Organization.UUID)
|
||||
organization, err := c.GetByUUID(address.Organization.UUID, user)
|
||||
if err != nil {
|
||||
return entity.OrganizationAddress{}, err
|
||||
}
|
||||
@@ -362,7 +450,7 @@ func (c *organizationRepo) SetOrganizationAddress(address entity.OrganizationAdd
|
||||
return address, nil
|
||||
}
|
||||
|
||||
func (c *organizationRepo) InactivateOrganizationContact(contact entity.OrganizationContact) error {
|
||||
func (c *organizationRepo) InactivateOrganizationContact(contact entity.OrganizationContact, user entity.User) error {
|
||||
const (
|
||||
query = "UPDATE tab_organization_contact SET active = 0, updated = CURRENT_TIMESTAMP, updated_user_id = ? WHERE organization_id = ? and organization_contact_uuid = ?"
|
||||
)
|
||||
@@ -371,7 +459,7 @@ func (c *organizationRepo) InactivateOrganizationContact(contact entity.Organiza
|
||||
return errors.NewNotFoundError()
|
||||
}
|
||||
|
||||
organization, err := c.GetByUUID(contact.Organization.UUID)
|
||||
organization, err := c.GetByUUID(contact.Organization.UUID, user)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -384,7 +472,7 @@ func (c *organizationRepo) InactivateOrganizationContact(contact entity.Organiza
|
||||
}
|
||||
}
|
||||
|
||||
func (c *organizationRepo) SetOrganizationContact(contact entity.OrganizationContact) (entity.OrganizationContact, error) {
|
||||
func (c *organizationRepo) SetOrganizationContact(contact entity.OrganizationContact, user entity.User) (entity.OrganizationContact, error) {
|
||||
const (
|
||||
selectQuery = "SELECT a.contact_type_id, a.name, a.key FROM tab_contact_type a WHERE a.key = ?"
|
||||
query = "INSERT INTO tab_organization_contact(organization_contact_uuid, organization_id, contact_type_id, contact, contact_name, contact_desc, created_user_id, updated_user_id) VALUES(?, ?, ?, ?, ?, ?, ?, ?);"
|
||||
@@ -394,7 +482,7 @@ func (c *organizationRepo) SetOrganizationContact(contact entity.OrganizationCon
|
||||
return entity.OrganizationContact{}, errors.NewNotFoundError()
|
||||
}
|
||||
|
||||
organization, err := c.GetByUUID(contact.Organization.UUID)
|
||||
organization, err := c.GetByUUID(contact.Organization.UUID, user)
|
||||
if err != nil {
|
||||
return entity.OrganizationContact{}, err
|
||||
}
|
||||
@@ -419,7 +507,7 @@ func (c *organizationRepo) SetOrganizationContact(contact entity.OrganizationCon
|
||||
return contact, nil
|
||||
}
|
||||
|
||||
func (c *organizationRepo) AddOrganization(organization entity.Organization) (entity.Organization, error) {
|
||||
func (c *organizationRepo) AddOrganization(organization entity.Organization, user entity.User) (entity.Organization, error) {
|
||||
const (
|
||||
queryOrgType = "SELECT a.organization_type_id FROM tab_organization_type a WHERE a.organization_type_key = ?;"
|
||||
queryParentOrg = "SELECT a.organization_id FROM tab_organization a WHERE a.organization_uuid = ?;"
|
||||
@@ -457,7 +545,7 @@ func (c *organizationRepo) AddOrganization(organization entity.Organization) (en
|
||||
if len(organization.Addresses) > 0 {
|
||||
for i, a := range organization.Addresses {
|
||||
a.Organization = &organization
|
||||
address, err := c.SetOrganizationAddress(a)
|
||||
address, err := c.SetOrganizationAddress(a, user)
|
||||
if err != nil {
|
||||
fmt.Println("Error to save addresses")
|
||||
return entity.Organization{}, err
|
||||
@@ -469,7 +557,7 @@ func (c *organizationRepo) AddOrganization(organization entity.Organization) (en
|
||||
if len(organization.Contacts) > 0 {
|
||||
for i, ct := range organization.Contacts {
|
||||
ct.Organization = &organization
|
||||
contact, err := c.SetOrganizationContact(ct)
|
||||
contact, err := c.SetOrganizationContact(ct, user)
|
||||
if err != nil {
|
||||
fmt.Println("Error to save contacts")
|
||||
return entity.Organization{}, err
|
||||
|
||||
Reference in New Issue
Block a user