axesslogistique_dark_sdk 1.0.0 copy "axesslogistique_dark_sdk: ^1.0.0" to clipboard
axesslogistique_dark_sdk: ^1.0.0 copied to clipboard

Unofficial JavaScript SDK for Axess Logistique API - Tunisian logistics and delivery services.

example/axesslogistique_dark_sdk_example.dart

import 'dart:io';
import 'package:axesslogistique_dark_sdk/axesslogistique_dark_sdk.dart';

void main() async {
  // Initialize the client with your API token
  // Use Environment.test for testing, Environment.prod for production
  final client = AxessLogistiqueClient(
    Environment.test, // Change to Environment.prod for production
    'YOUR_API_TOKEN_HERE',
  );

  try {
    print('๐Ÿš€ AxessLogistique SDK Example\n');

    // 1. Create a new pickup
    print('๐Ÿ“ฆ Creating a new pickup...');
    final pickupRequest = PickupRequest(
      // Source address information
      adresseSource: '123 Rue de la Paix',
      gouvernoratSource: 'Tunis',
      delegationSource: 'Carthage',
      localiteSource: 'Sidi Bou Said',
      nomContactSource: 'Ahmed Ben Ali',
      dateEnlevement: '2024-01-20',
      telContactSource: '+21612345678',

      // Destination address information
      adresseDestination: '456 Avenue Habib Bourguiba',
      gouvernoratDestination: 'Sfax',
      delegationDestination: 'Sfax Ville',
      localiteDestination: 'Sfax Centre',
      nomResponsableDestination: 'Fatma Ben Salem',
      telContactDestination: '+21687654321',

      // Optional warehouse ID
      idEntrepot: 123,

      // Product information
      nomProduit: 'Smartphone Samsung Galaxy S23',
      description:
          'Smartphone neuf avec garantie, livrรฉ dans sa boรฎte originale',
      reference: 'CMD-2024-001',
      quantite: 1,
      fragile: true,
      prixTotal: 2500.0,
      livraisonGratuite: false,
      produitEchange: false,
    );

    final pickupResponse = await client.createPickup(pickupRequest);

    print('โœ… Pickup created successfully!');
    print('   ID: ${pickupResponse.id}');
    print('   Tracking Number: ${pickupResponse.trackingNumber}');
    print('   Status: ${pickupResponse.status}');
    print('   Reference: ${pickupResponse.reference}');
    print('   Subtotal: ${pickupResponse.prixSousTotal} TND');
    print('   Fees: ${pickupResponse.fraisTotal} TND');
    print('   Total: ${pickupResponse.prixTotal} TND');
    print('   Destination: ${pickupResponse.destination}');
    print('   Sender: ${pickupResponse.expediteur}');
    if (pickupResponse.externalCode != null) {
      print('   External Code: ${pickupResponse.externalCode}');
    }
    print('');

    // 2. Get pickup status
    print('๐Ÿ“Š Getting pickup status...');
    final status = await client.getPickupStatus(pickupResponse.trackingNumber);

    print('โœ… Pickup status retrieved!');
    print('   Pickup ID: ${status.pickupId}');
    print('   Tracking Number: ${status.trackingNumber}');
    print('   Status: ${status.status}');
    print('   Sub Status: ${status.subStatus ?? 'N/A'}');
    print('   Client Name: ${status.clientName}');
    print('   Client Phone: ${status.clientPhone}');
    print('   Updated At: ${status.updatedAt}');
    if (status.livreur != null) {
      print('   Driver: ${status.livreur}');
      print('   Driver Phone: ${status.livreurTel ?? 'N/A'}');
    }
    if (status.reason != null) {
      print('   Reason: ${status.reason}');
    }
    print('');

    // 3. Get multiple pickup statuses
    print('๐Ÿ“‹ Getting multiple pickup statuses...');
    final multipleStatuses = await client.getManyPickupStatuses([
      pickupResponse.trackingNumber,
      'TRK123456789', // Example tracking number
      'TRK987654321', // Example tracking number
    ]);

    print('โœ… Multiple statuses retrieved!');
    print('   Found ${multipleStatuses.length} statuses:');
    for (final status in multipleStatuses) {
      print('   - ${status.trackingNumber}: ${status.status}');
    }
    print('');

    // 4. Download delivery note (PDF)
    print('๐Ÿ“„ Downloading delivery note...');
    final pdfBytes = await client.downloadBonDeCommande(
      pickupResponse.trackingNumber,
    );

    // Save the PDF to a file
    final file = File('bon_de_commande_${pickupResponse.trackingNumber}.pdf');
    await file.writeAsBytes(pdfBytes);

    print('โœ… Delivery note downloaded!');
    print('   Saved to: ${file.path}');
    print('   File size: ${pdfBytes.length} bytes');
    print('');

    // 5. Get available zones
    print('๐ŸŒ Getting available zones...');
    final zones = await client.getZones();

    print('โœ… Zones retrieved!');
    print('   Available zones:');
    if (zones['zones'] != null) {
      final zonesList = zones['zones'] as List;
      for (final zone in zonesList) {
        print('   - ${zone['name']} (ID: ${zone['id']})');
      }
    } else {
      print('   No zones data available');
    }
    print('');

    print('๐ŸŽ‰ All operations completed successfully!');
  } catch (e) {
    print('โŒ Error occurred: $e');

    // Handle specific error types
    if (e.toString().contains('Invalid token')) {
      print('๐Ÿ’ก Make sure you have provided a valid API token');
    } else if (e.toString().contains('Network')) {
      print('๐Ÿ’ก Check your internet connection');
    } else if (e.toString().contains('404')) {
      print('๐Ÿ’ก The requested resource was not found');
    }
  }
}

// Example of error handling and retry logic
Future<void> createPickupWithRetry(
  AxessLogistiqueClient client,
  PickupRequest request, {
  int maxRetries = 3,
  Duration delay = const Duration(seconds: 2),
}) async {
  for (int attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      final response = await client.createPickup(request);
      print('โœ… Pickup created on attempt $attempt');
      return;
    } catch (e) {
      print('โŒ Attempt $attempt failed: $e');
      if (attempt < maxRetries) {
        print('โณ Retrying in ${delay.inSeconds} seconds...');
        await Future.delayed(delay);
      } else {
        print('๐Ÿ’ฅ All retry attempts failed');
        rethrow;
      }
    }
  }
}

// Example of batch pickup creation
Future<List<PickupResponse>> createBatchPickups(
  AxessLogistiqueClient client,
  List<PickupRequest> requests,
) async {
  final responses = <PickupResponse>[];

  for (int i = 0; i < requests.length; i++) {
    try {
      print('Creating pickup ${i + 1}/${requests.length}...');
      final response = await client.createPickup(requests[i]);
      responses.add(response);
      print('โœ… Pickup ${i + 1} created: ${response.trackingNumber}');
    } catch (e) {
      print('โŒ Failed to create pickup ${i + 1}: $e');
    }
  }

  return responses;
}
0
likes
150
points
33
downloads

Documentation

API reference

Publisher

verified publisherhanout.cc

Weekly Downloads

Unofficial JavaScript SDK for Axess Logistique API - Tunisian logistics and delivery services.

Homepage
Repository (GitHub)

License

MIT (license)

Dependencies

http

More

Packages that depend on axesslogistique_dark_sdk