96 lines
No EOL
2.6 KiB
Rust
96 lines
No EOL
2.6 KiB
Rust
//! Demonstrates using the SDK as a library (no server).
|
|
|
|
use kra_etims_sdk::{
|
|
models::{
|
|
auth::AuthRequest,
|
|
basic_data::CodeListRequest,
|
|
initialization::InitOsdcInfoRequest,
|
|
sales::{SalesTrnsItem, SendSalesTrnsRequest},
|
|
},
|
|
KRAeTimsSDK,
|
|
};
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
dotenvy::dotenv().ok();
|
|
kra_etims_sdk::logger::init();
|
|
|
|
let sdk = KRAeTimsSDK::new().expect("SDK initialisation failed");
|
|
|
|
// 1. Authenticate
|
|
println!("▸ Authenticating…");
|
|
let auth = sdk
|
|
.auth
|
|
.get_token(AuthRequest {
|
|
username: std::env::var("API_USERNAME").unwrap(),
|
|
password: std::env::var("API_PASSWORD").unwrap(),
|
|
})
|
|
.await;
|
|
match &auth {
|
|
Ok(r) => println!(" ✓ token obtained, expires at {}", r.data.expires_at),
|
|
Err(e) => {
|
|
eprintln!(" ✗ {e}");
|
|
return;
|
|
}
|
|
}
|
|
|
|
// 2. Initialise OSDC
|
|
println!("▸ Initialising OSDC Info…");
|
|
match sdk
|
|
.initialization
|
|
.select_init_osdc_info(InitOsdcInfoRequest {
|
|
tin: "P000000045R".into(),
|
|
bhf_id: "00".into(),
|
|
dvc_srl_no: "MOVA22".into(),
|
|
})
|
|
.await
|
|
{
|
|
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
|
|
Err(e) => eprintln!(" ✗ {e}"),
|
|
}
|
|
|
|
// 3. Code list
|
|
println!("▸ Fetching code list…");
|
|
match sdk
|
|
.basic_data
|
|
.select_code_list(CodeListRequest {
|
|
tin: "P000000045R".into(),
|
|
bhf_id: "00".into(),
|
|
last_req_dt: "20220101010101".into(),
|
|
cmc_key: None,
|
|
})
|
|
.await
|
|
{
|
|
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
|
|
Err(e) => eprintln!(" ✗ {e}"),
|
|
}
|
|
|
|
// 4. Sales transaction
|
|
println!("▸ Sending sales transaction…");
|
|
match sdk
|
|
.sales
|
|
.send_sales_trns(SendSalesTrnsRequest {
|
|
tin: "P000000045R".into(),
|
|
bhf_id: "00".into(),
|
|
invc_no: "INV001".into(),
|
|
sales_trns_items: vec![SalesTrnsItem {
|
|
item_cd: "ITEM001".into(),
|
|
item_nm: "Test Item".into(),
|
|
qty: 1.0,
|
|
prc: 100.0,
|
|
sply_amt: 100.0,
|
|
dc_rt: None,
|
|
dc_amt: None,
|
|
tax_ty_cd: "V".into(),
|
|
tax_amt: 16.0,
|
|
}],
|
|
cmc_key: None,
|
|
})
|
|
.await
|
|
{
|
|
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
|
|
Err(e) => eprintln!(" ✗ {e}"),
|
|
}
|
|
|
|
println!("Done.");
|
|
} |