robot-deployment-planing-system

SP1V95DB4JK47QVPJBXCEN6MT35JK84CQ4CWS15DQ

Source Code

(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-PLAN-NOT-FOUND (err u101))
(define-constant ERR-DEPLOYMENT-NOT-FOUND (err u102))

(define-map deployment-plans
  { plan-id: uint }
  {
    facility-name: (string-ascii 100),
    robot-type: (string-ascii 50),
    planned-quantity: uint,
    deployment-zone: (string-ascii 50),
    planned-date: uint,
    status: (string-ascii 20),
    planner: principal
  }
)

(define-map robot-deployments
  { plan-id: uint, deployment-id: uint }
  {
    robot-serial: (string-ascii 30),
    installation-date: uint,
    location: (string-ascii 100),
    operational: bool,
    deployed: bool
  }
)

(define-data-var plan-nonce uint u0)

(define-public (create-plan
  (facility (string-ascii 100))
  (robot-type (string-ascii 50))
  (quantity uint)
  (zone (string-ascii 50))
  (planned-date uint)
)
  (let ((plan-id (var-get plan-nonce)))
    (map-set deployment-plans
      { plan-id: plan-id }
      {
        facility-name: facility,
        robot-type: robot-type,
        planned-quantity: quantity,
        deployment-zone: zone,
        planned-date: planned-date,
        status: "planning",
        planner: tx-sender
      }
    )
    (var-set plan-nonce (+ plan-id u1))
    (ok plan-id)
  )
)

(define-public (add-deployment
  (plan-id uint)
  (deployment-id uint)
  (robot-serial (string-ascii 30))
  (location (string-ascii 100))
)
  (let ((plan (unwrap! (map-get? deployment-plans { plan-id: plan-id }) ERR-PLAN-NOT-FOUND)))
    (asserts! (is-eq tx-sender (get planner plan)) ERR-NOT-AUTHORIZED)
    (ok (map-set robot-deployments
      { plan-id: plan-id, deployment-id: deployment-id }
      {
        robot-serial: robot-serial,
        installation-date: u0,
        location: location,
        operational: false,
        deployed: false
      }
    ))
  )
)

(define-public (complete-deployment (plan-id uint) (deployment-id uint))
  (let (
    (plan (unwrap! (map-get? deployment-plans { plan-id: plan-id }) ERR-PLAN-NOT-FOUND))
    (deployment (unwrap! (map-get? robot-deployments { plan-id: plan-id, deployment-id: deployment-id }) ERR-DEPLOYMENT-NOT-FOUND))
  )
    (asserts! (is-eq tx-sender (get planner plan)) ERR-NOT-AUTHORIZED)
    (ok (map-set robot-deployments
      { plan-id: plan-id, deployment-id: deployment-id }
      (merge deployment { deployed: true, installation-date: stacks-block-height })
    ))
  )
)

(define-public (set-operational (plan-id uint) (deployment-id uint) (status bool))
  (let (
    (plan (unwrap! (map-get? deployment-plans { plan-id: plan-id }) ERR-PLAN-NOT-FOUND))
    (deployment (unwrap! (map-get? robot-deployments { plan-id: plan-id, deployment-id: deployment-id }) ERR-DEPLOYMENT-NOT-FOUND))
  )
    (asserts! (is-eq tx-sender (get planner plan)) ERR-NOT-AUTHORIZED)
    (ok (map-set robot-deployments
      { plan-id: plan-id, deployment-id: deployment-id }
      (merge deployment { operational: status })
    ))
  )
)

(define-read-only (get-plan-info (plan-id uint))
  (map-get? deployment-plans { plan-id: plan-id })
)

(define-read-only (get-deployment-info (plan-id uint) (deployment-id uint))
  (map-get? robot-deployments { plan-id: plan-id, deployment-id: deployment-id })
)

(define-public (update-plan-status (plan-id uint) (new-status (string-ascii 20)))
  (let ((plan (unwrap! (map-get? deployment-plans { plan-id: plan-id }) ERR-PLAN-NOT-FOUND)))
    (asserts! (is-eq tx-sender (get planner plan)) ERR-NOT-AUTHORIZED)
    (ok (map-set deployment-plans
      { plan-id: plan-id }
      (merge plan { status: new-status })
    ))
  )
)

Functions (7)

FunctionAccessArgs
create-planpublicfacility: (string-ascii 100
add-deploymentpublicplan-id: uint, deployment-id: uint, robot-serial: (string-ascii 30
complete-deploymentpublicplan-id: uint, deployment-id: uint
set-operationalpublicplan-id: uint, deployment-id: uint, status: bool
get-plan-inforead-onlyplan-id: uint
get-deployment-inforead-onlyplan-id: uint, deployment-id: uint
update-plan-statuspublicplan-id: uint, new-status: (string-ascii 20