Skip to content

ahgVendorPlugin - Technical Documentation

Version: 1.0.0
Category: Administration
Dependencies: atom-framework


Overview

Vendor and supplier management for conservation services, digitization, storage, and other archival service providers.


Database Schema

ERD Diagram

┌─────────────────────────────────────────┐
│              vendor                     │
├─────────────────────────────────────────┤
│ PK id INT                              │
│                                         │
│ -- IDENTITY --                          │
│    name VARCHAR                         │
│    trading_name VARCHAR                 │
│    registration_number VARCHAR          │
│    vat_number VARCHAR                   │
│    bee_level VARCHAR                    │
│    bee_certificate VARCHAR              │
│                                         │
│ -- CONTACT --                           │
│    contact_person VARCHAR               │
│    email VARCHAR                        │
│    phone VARCHAR                        │
│    mobile VARCHAR                       │
│    website VARCHAR                      │
│                                         │
│ -- ADDRESS --                           │
│    address_line1 VARCHAR                │
│    address_line2 VARCHAR                │
│    city VARCHAR                         │
│    province VARCHAR                     │
│    postal_code VARCHAR                  │
│    country VARCHAR                      │
│                                         │
│ -- SERVICES --                          │
│    services JSON                        │
│    specializations JSON                 │
│                                         │
│ -- BANKING --                           │
│    bank_name VARCHAR                    │
│    bank_branch VARCHAR                  │
│    account_number VARCHAR               │
│    account_type VARCHAR                 │
│                                         │
│ -- STATUS --                            │
│    status ENUM                          │
│    rating INT (1-5)                     │
│    notes TEXT                           │
│    is_preferred TINYINT                 │
│                                         │
│    created_at TIMESTAMP                 │
│    updated_at TIMESTAMP                 │
└─────────────────────────────────────────┘
              │ 1:N
┌─────────────────────────────────────────┐
│           vendor_contract               │
├─────────────────────────────────────────┤
│ PK id INT                              │
│ FK vendor_id INT                       │
│    contract_number VARCHAR              │
│    title VARCHAR                        │
│    description TEXT                     │
│    service_type ENUM                    │
│    start_date DATE                      │
│    end_date DATE                        │
│    value DECIMAL                        │
│    payment_terms VARCHAR                │
│    status ENUM                          │
│    document_path VARCHAR                │
│    created_at TIMESTAMP                 │
│    updated_at TIMESTAMP                 │
└─────────────────────────────────────────┘
              │ 1:N
┌─────────────────────────────────────────┐
│           vendor_job                    │
├─────────────────────────────────────────┤
│ PK id INT                              │
│ FK vendor_id INT                       │
│ FK contract_id INT                     │
│    job_number VARCHAR                   │
│    title VARCHAR                        │
│    description TEXT                     │
│    service_type ENUM                    │
│    status ENUM                          │
│    priority ENUM                        │
│    start_date DATE                      │
│    due_date DATE                        │
│    completed_date DATE                  │
│    estimated_cost DECIMAL               │
│    actual_cost DECIMAL                  │
│    assigned_to INT                      │
│    notes TEXT                           │
│    created_at TIMESTAMP                 │
│    updated_at TIMESTAMP                 │
└─────────────────────────────────────────┘
              │ N:M
┌─────────────────────────────────────────┐
│          vendor_job_item                │
├─────────────────────────────────────────┤
│ PK id INT                              │
│ FK job_id INT                          │
│ FK object_id INT                       │
│    object_type VARCHAR                  │
│    quantity INT                         │
│    unit_cost DECIMAL                    │
│    notes TEXT                           │
│    created_at TIMESTAMP                 │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│          vendor_evaluation              │
├─────────────────────────────────────────┤
│ PK id INT                              │
│ FK vendor_id INT                       │
│ FK job_id INT                          │
│    evaluation_date DATE                 │
│    quality_rating INT (1-5)             │
│    timeliness_rating INT (1-5)          │
│    communication_rating INT (1-5)       │
│    value_rating INT (1-5)               │
│    overall_rating INT (1-5)             │
│    comments TEXT                        │
│    evaluated_by INT                     │
│    created_at TIMESTAMP                 │
└─────────────────────────────────────────┘

Service Types

Type Description
conservation Paper/book conservation
digitization Scanning, photography
binding Bookbinding services
storage Offsite storage
transport Moving/courier
pest_control IPM services
environmental Climate monitoring
it_services Technical support
consulting Advisory services

Service Methods

VendorService

namespace ahgVendorPlugin\Service;

class VendorService
{
    // Vendors
    public function createVendor(array $data): int
    public function updateVendor(int $id, array $data): bool
    public function getVendor(int $id): ?array
    public function listVendors(array $filters): Collection
    public function searchVendors(string $query): Collection
    public function getVendorsByService(string $serviceType): Collection

    // Contracts
    public function createContract(int $vendorId, array $data): int
    public function updateContract(int $id, array $data): bool
    public function getActiveContracts(int $vendorId): Collection
    public function getExpiringContracts(int $days = 30): Collection

    // Jobs
    public function createJob(int $vendorId, array $data): int
    public function updateJob(int $id, array $data): bool
    public function addJobItems(int $jobId, array $items): bool
    public function getJobsByStatus(string $status): Collection
    public function completeJob(int $id, array $data): bool

    // Evaluations
    public function evaluateVendor(int $vendorId, int $jobId, array $ratings): int
    public function getVendorRating(int $vendorId): float
    public function getEvaluationHistory(int $vendorId): Collection
}

Part of the AtoM AHG Framework