complete structure revamp
This commit is contained in:
103
api/fiscal.go
Normal file
103
api/fiscal.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
func (c *Client) executeRequest(ctx context.Context, request FiscalRequest, response interface{}) error {
|
||||
resp, err := c.resty.R().
|
||||
SetContext(ctx).
|
||||
SetHeader("Authorization", c.token).
|
||||
SetBody(request).
|
||||
Post(c.apiBaseURL + "/fiscal/execute")
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("request failed: %w", err)
|
||||
}
|
||||
|
||||
if resp.IsError() {
|
||||
return fmt.Errorf("api error: %v", resp.Error())
|
||||
}
|
||||
|
||||
if resp.StatusCode() != 200 {
|
||||
return fmt.Errorf("unexpected status code: %d", resp.StatusCode())
|
||||
}
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read response: %w", err)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(body, response); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal response: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) OpenShift(ctx context.Context, cashier string) (*SellResponse, error) {
|
||||
request := FiscalRequest{
|
||||
Fiscal: Fiscal{
|
||||
Task: TaskOpenShift,
|
||||
Cashier: cashier,
|
||||
},
|
||||
}
|
||||
|
||||
var response SellResponse
|
||||
if err := c.executeRequest(ctx, request, &response); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
}
|
||||
|
||||
func (c *Client) CloseShift(ctx context.Context, cashier string) (*ZReportResponse, error) {
|
||||
request := FiscalRequest{
|
||||
Fiscal: Fiscal{
|
||||
Task: TaskZReport,
|
||||
Cashier: cashier,
|
||||
},
|
||||
}
|
||||
|
||||
var response ZReportResponse
|
||||
if err := c.executeRequest(ctx, request, &response); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
}
|
||||
|
||||
type SellParams struct {
|
||||
Cashier string
|
||||
Source string
|
||||
Rows []ReceiptRow
|
||||
Pays []ReceiptPay
|
||||
Userinfo *Userinfo
|
||||
}
|
||||
|
||||
func (c *Client) Sell(ctx context.Context, params SellParams) (*SellResponse, error) {
|
||||
receipt := NewReceipt(params.Rows, params.Pays)
|
||||
|
||||
request := FiscalRequest{
|
||||
Source: params.Source,
|
||||
Fiscal: Fiscal{
|
||||
Task: TaskSell,
|
||||
Cashier: params.Cashier,
|
||||
Receipt: &receipt,
|
||||
},
|
||||
}
|
||||
|
||||
if params.Userinfo != nil {
|
||||
request.Userinfo = *params.Userinfo
|
||||
}
|
||||
|
||||
var response SellResponse
|
||||
if err := c.executeRequest(ctx, request, &response); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &response, nil
|
||||
}
|
||||
Reference in New Issue
Block a user