use serde::Serialize; use anyhow::Result; use chrono::{DateTime, NaiveDate, Utc}; use sqlx::SqlitePool; #[derive(Clone, Debug, Serialize)] #[derive(sqlx::FromRow)] pub struct DbVetcoveItemHistoryEntry { pub id: i64, pub vetcove_entry_id: i64, pub vetcove_item_id: i64, pub order_date: DateTime, pub item_name: String, pub order_id: String, pub units: f64, pub quantity: f64, pub total_price: String, pub unit_price: Option, pub list_price: Option, pub cost_per_dose: Option, pub hospital: Option, pub po_number: Option, pub supplier: Option, pub manufacturer: Option, pub manufacturer_number: Option, pub primary_category: Option, pub secondary_category: Option, pub unit_measurement: Option, pub item_status: Option, pub supplier_sku: Option, } pub async fn add_vetcove_item_history_entry(db: &SqlitePool, vetcove_entry_id: i64, vetcove_item_id: i64, order_date: NaiveDate, item_name: String, order_id: String, units: f64, quantity: f64, total_price: String, unit_price: Option, list_price: Option, cost_per_dose: Option, hospital: Option, po_number: Option, supplier: Option, manufacturer: Option, manufacturer_number: Option, primary_category: Option, secondary_category: Option, unit_measurement: Option, item_status: Option, supplier_sku: Option) -> Result> { let existing: i64 = sqlx::query_scalar(r#" SELECT COUNT(1) FROM VetcoveItemHistory WHERE vetcove_entry_id = ? "#).bind(vetcove_entry_id).fetch_one(db).await?; if existing > 0 { return Ok(None) } let res = sqlx::query( r#" INSERT INTO VetcoveItemHistory ( vetcove_entry_id, vetcove_item_id, order_date, item_name, order_id, units, quantity, total_price, unit_price, list_price, cost_per_dose, hospital, po_number, supplier, manufacturer, manufacturer_number, primary_category, secondary_category, unit_measurement, item_status, supplier_sku ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "#) .bind(vetcove_entry_id) .bind(vetcove_item_id) .bind(order_date) .bind(item_name) .bind(order_id) .bind(units) .bind(quantity) .bind(total_price) .bind(unit_price) .bind(list_price) .bind(cost_per_dose) .bind(hospital) .bind(po_number) .bind(supplier) .bind(manufacturer) .bind(manufacturer_number) .bind(primary_category) .bind(secondary_category) .bind(unit_measurement) .bind(item_status) .bind(supplier_sku) .execute(db).await?; let new_id = res.last_insert_rowid(); Ok(Some(new_id)) }