crude-oil-logistics-management

SP1V95DB4JK47QVPJBXCEN6MT35JK84CQ4CWS15DQ

Source Code

(define-constant contract-owner tx-sender)
(define-constant err-owner-only (err u100))
(define-constant err-not-found (err u101))

(define-map logistics-routes
  uint
  {
    operator: principal,
    origin: (string-ascii 128),
    destination: (string-ascii 128),
    transport-mode: (string-ascii 32),
    capacity: uint,
    cost-per-barrel: uint,
    active: bool
  })

(define-map logistics-shipments
  uint
  {
    route-id: uint,
    volume: uint,
    departure-time: uint,
    arrival-time: uint,
    status: (string-ascii 32),
    cost: uint
  })

(define-data-var next-route-id uint u0)
(define-data-var next-logistics-shipment-id uint u0)

(define-read-only (get-route (route-id uint))
  (ok (map-get? logistics-routes route-id)))

(define-public (create-route (origin (string-ascii 128)) (dest (string-ascii 128)) (mode (string-ascii 32)) (capacity uint) (cost uint))
  (let ((route-id (var-get next-route-id)))
    (map-set logistics-routes route-id
      {operator: tx-sender, origin: origin, destination: dest,
       transport-mode: mode, capacity: capacity, cost-per-barrel: cost, active: true})
    (var-set next-route-id (+ route-id u1))
    (ok route-id)))

(define-public (schedule-logistics (route-id uint) (volume uint) (arrival uint))
  (let ((shipment-id (var-get next-logistics-shipment-id))
        (route (unwrap! (map-get? logistics-routes route-id) err-not-found))
        (total-cost (* volume (get cost-per-barrel route))))
    (map-set logistics-shipments shipment-id
      {route-id: route-id, volume: volume, departure-time: stacks-block-height,
       arrival-time: arrival, status: "scheduled", cost: total-cost})
    (var-set next-logistics-shipment-id (+ shipment-id u1))
    (ok shipment-id)))

Functions (3)

FunctionAccessArgs
get-routeread-onlyroute-id: uint
create-routepublicorigin: (string-ascii 128
schedule-logisticspublicroute-id: uint, volume: uint, arrival: uint