hippone/algerian-invoice-code-generator

v0.2.0 2021-07-12 14:34 UTC

This package is auto-updated.

Last update: 2024-09-15 21:59:09 UTC


README

该库可用于生成发票、报价或其他商业交易文档的代码。

目标

旨在提供有助于生成所需代码的界面。

安装

推荐(也是最佳)安装方式是使用composer

composer require hippone/algerian-invoice-code-generator

用法

Hippone\InvoiceCode\CodeGenerator 代码是库的主要组件,它实现了 Hippone\InvoiceCode\CodeGeneratorInterface,该类目前有一个依赖项(即)实现 Hippone\InvoiceCode\Model\IdentifiableProvider,由客户端提供,此依赖项是客户端使用的持久化层的接口,一个简单的实现示例是使用PDO与SQLite:

<?php
declare(strict_types=1);

namespace MyNamespace\Persistence\SQLite;

use DateTimeImmutable;
use Hippone\InvoiceCode\Model\CodeComponents;
use Hippone\InvoiceCode\Model\IdentifiableProvider;
use PDO;

class SQLiteIdentifiableProvider implements IdentifiableProvider
{
    private PDO $pdo;
    
    public function __construct(PDO $pdo)
    {
        $this->pdo = $pdo;
    }

    public function nextCode(DateTimeImmutable $year): CodeComponents
    {
         $statement = $this->pdo->prepare('
                            SELECT COUNT(*) FROM invoices 
                            AS i 
                            WHERE strftime("%Y", i.created_at) = :currentYear
        ');
        $statement->bindValue(':currentYear', $year->format('Y'));
        $statement->execute();
        $currentCount = $statement->fetchColumn();
        $sequentialNumber = $currentCount + 1;
        return CodeComponents::from($sequentialNumber, $year);
    }
}

一旦实现了 Hippone\InvoiceCode\Model\IdentifiableProvider,就可以实例化并使用 Hippone\InvoiceCode\CodeGenerator 类,如下所示:

$codeGenerator = new CodeGenerator(new SQLiteIdentifiableProvider($pdo)); // assume PDO object is instantiated
$codeGenerator->generateForYear(DateTimeImmutable::createFromFormat('Y', '2021')); // replace 2021 by the desired value

许可证

MIT许可证.