no-vat-customers #71
@@ -3,6 +3,7 @@ package restricted
|
|||||||
import (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware"
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
|
"git.ma-al.com/goc_daniel/b2b/app/delivery/middleware/perms"
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/service/customerService"
|
"git.ma-al.com/goc_daniel/b2b/app/service/customerService"
|
||||||
@@ -31,6 +32,7 @@ func CustomerHandlerRoutes(r fiber.Router) fiber.Router {
|
|||||||
|
|
||||||
r.Get("", handler.customerData)
|
r.Get("", handler.customerData)
|
||||||
r.Get("/list", handler.listCustomers)
|
r.Get("/list", handler.listCustomers)
|
||||||
|
r.Patch("/no-vat", middleware.Require(perms.UserWriteAny), handler.setCustomerNoVatStatus)
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,3 +111,28 @@ var columnMappingListUsers map[string]string = map[string]string{
|
|||||||
"first_name": "users.first_name",
|
"first_name": "users.first_name",
|
||||||
"last_name": "users.last_name",
|
"last_name": "users.last_name",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *customerHandler) setCustomerNoVatStatus(fc fiber.Ctx) error {
|
||||||
|
user, ok := localeExtractor.GetCustomer(fc)
|
||||||
|
if !ok || user == nil {
|
||||||
|
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrBadAttribute)).
|
||||||
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrBadAttribute)))
|
||||||
|
}
|
||||||
|
|
||||||
|
var req struct {
|
||||||
|
CustomerID uint `json:"customer_id"`
|
||||||
|
IsNoVat bool `json:"is_no_vat"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := fc.Bind().Body(&req); err != nil {
|
||||||
|
return fc.Status(responseErrors.GetErrorStatus(responseErrors.ErrJSONBody)).
|
||||||
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, responseErrors.ErrJSONBody)))
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.service.SetCustomerNoVatStatus(req.CustomerID, req.IsNoVat); err != nil {
|
||||||
|
return fc.Status(responseErrors.GetErrorStatus(err)).
|
||||||
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(fc, err)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return fc.JSON(response.Make(nullable.GetNil(""), 0, i18n.T_(fc, response.Message_OK)))
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ type Customer struct {
|
|||||||
CreatedAt time.Time `json:"created_at"`
|
CreatedAt time.Time `json:"created_at"`
|
||||||
UpdatedAt time.Time `json:"updated_at"`
|
UpdatedAt time.Time `json:"updated_at"`
|
||||||
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
||||||
|
IsNoVat bool `gorm:"default:false" json:"is_no_vat"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *Customer) HasPermission(permission perms.Permission) bool {
|
func (u *Customer) HasPermission(permission perms.Permission) bool {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ type UICustomerRepo interface {
|
|||||||
Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error)
|
Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error)
|
||||||
Save(customer *model.Customer) error
|
Save(customer *model.Customer) error
|
||||||
Create(customer *model.Customer) error
|
Create(customer *model.Customer) error
|
||||||
|
SetCustomerNoVatStatus(customerID uint, isNoVat bool) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type CustomerRepo struct{}
|
type CustomerRepo struct{}
|
||||||
@@ -111,6 +112,10 @@ func (repo *CustomerRepo) Create(customer *model.Customer) error {
|
|||||||
return db.DB.Create(customer).Error
|
return db.DB.Create(customer).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (repo *CustomerRepo) SetCustomerNoVatStatus(customerID uint, isNoVat bool) error {
|
||||||
|
return db.DB.Model(&model.Customer{}).Where("id = ?", customerID).Update("is_no_vat", isNoVat).Error
|
||||||
|
}
|
||||||
|
|
||||||
// func (repo *CustomerRepo) Search(
|
// func (repo *CustomerRepo) Search(
|
||||||
// customerId uint,
|
// customerId uint,
|
||||||
// partnerCode string,
|
// partnerCode string,
|
||||||
|
|||||||
@@ -24,3 +24,7 @@ func (s *CustomerService) GetById(id uint) (*model.Customer, error) {
|
|||||||
func (s *CustomerService) Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error) {
|
func (s *CustomerService) Find(langId uint, p find.Paging, filt *filters.FiltersList, search string) (*find.Found[model.UserInList], error) {
|
||||||
return s.repo.Find(langId, p, filt, search)
|
return s.repo.Find(langId, p, filt, search)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *CustomerService) SetCustomerNoVatStatus(customerID uint, isNoVat bool) error {
|
||||||
|
return s.repo.SetCustomerNoVatStatus(customerID, isNoVat)
|
||||||
|
}
|
||||||
|
|||||||
15
bruno/api_v1/customer/Set is_no_vat.yml
Normal file
15
bruno/api_v1/customer/Set is_no_vat.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
info:
|
||||||
|
name: Set is_no_vat
|
||||||
|
type: http
|
||||||
|
seq: 4
|
||||||
|
|
||||||
|
http:
|
||||||
|
method: PATCH
|
||||||
|
url: "{{bas_url"
|
||||||
|
auth: inherit
|
||||||
|
|
||||||
|
settings:
|
||||||
|
encodeUrl: true
|
||||||
|
timeout: 0
|
||||||
|
followRedirects: true
|
||||||
|
maxRedirects: 5
|
||||||
@@ -112,7 +112,8 @@ CREATE TABLE IF NOT EXISTS b2b_customers (
|
|||||||
country_id INT NULL DEFAULT 2,
|
country_id INT NULL DEFAULT 2,
|
||||||
created_at DATETIME(6) NULL,
|
created_at DATETIME(6) NULL,
|
||||||
updated_at DATETIME(6) NULL,
|
updated_at DATETIME(6) NULL,
|
||||||
deleted_at DATETIME(6) NULL
|
deleted_at DATETIME(6) NULL,
|
||||||
|
is_no_vat TINYINT(1) NULL DEFAULT 0
|
||||||
|
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_customers_email
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_customers_email
|
||||||
|
|||||||
Reference in New Issue
Block a user
if it has default value, then perhaps make it NOT NULL?
that's true, it makes more sense to set it to NOT NULL. the PR already auto-merged so I'll make the change in next unrelated PR