118 lines
2.4 KiB
Go
118 lines
2.4 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
func (c *Client) executeRequest(ctx context.Context, request FiscalRequest, response interface{}) error {
|
|
//execute request with json body in request
|
|
reqJson, err := json.Marshal(request)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to marshal request: %w", err)
|
|
}
|
|
fmt.Println(string(reqJson))
|
|
|
|
resp, err := c.resty.R().
|
|
SetContext(ctx).
|
|
SetHeader("Authorization", c.token).
|
|
SetBody(reqJson).
|
|
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
|
|
CommentUP string
|
|
}
|
|
|
|
func (c *Client) Sell(ctx context.Context, params SellParams) (*SellResponse, error) {
|
|
receipt := NewReceipt(params.Rows, params.Pays, params.CommentUP)
|
|
|
|
request := FiscalRequest{
|
|
Source: params.Source,
|
|
Fiscal: Fiscal{
|
|
Task: TaskSell,
|
|
Cashier: params.Cashier,
|
|
Receipt: &receipt,
|
|
},
|
|
}
|
|
|
|
if params.Userinfo != nil {
|
|
request.Userinfo = *params.Userinfo
|
|
}
|
|
|
|
reqJson, err := json.Marshal(request)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
fmt.Println(string(reqJson))
|
|
|
|
var response SellResponse
|
|
if err := c.executeRequest(ctx, request, &response); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &response, nil
|
|
}
|