Giới thiệu
Phiên bản 5 của Invoice Ninja đã có mặt! Chúng tôi đã lấy những phần tốt nhất của phiên bản 4 và thêm các tính năng được yêu cầu nhiều nhất để tạo ra một ứng dụng lập hóa đơn không giống bất kỳ ứng dụng nào khác.
Tất cả các tính năng Pro và Enterprise từ ứng dụng được lưu trữ đều có trong mã mở. Chúng tôi cung cấp giấy phép nhãn trắng trị giá 30 đô la một năm để xóa nhãn hiệu Invoice Ninja khỏi các phần hướng đến khách hàng của ứng dụng.
Cài đặt
Ứng dụng di động
Ứng dụng máy tính để bàn
Tùy chọn cài đặt
Nhà cung cấp được đề xuất
Thiết lập lưu trữ nhanh
git clone https://github.com/invoiceninja/invoiceninja.git
git checkout v5-stable
cp .env.example .env
composer i -o --no-dev
php artisan key:generate
Xin lưu ý: APP_KEY trong tệp .env được sử dụng để mã hóa dữ liệu, nếu bạn mất khóa này, bạn sẽ không thể chạy ứng dụng.
Chạy nếu bạn muốn tải dữ liệu mẫu, hãy nhớ cấu hình .env
php artisan migrate:fresh --seed && php artisan db:seed && php artisan ninja:create-test-data
Để chạy máy chủ web
php artisan serve
Điều hướng đến (thay thế localhost bằng tên miền thích hợp)
http://localhost:8000/setup - To setup your configuration if you did not load sample data.
http://localhost:8000/ - For Administrator Logon
user: small@example.com
pass: password
http://localhost:8000/client/login - For Client Portal
user: user@example.com
pass: password
Hướng dẫn dành cho nhà phát triển
Thiết kế ứng dụng
API và cổng thông tin khách hàng đã được phát triển bằng Laravel. Nếu bạn muốn đóng góp cho dự án này thì việc quen thuộc với Laravel là điều cần thiết.
Khi kiểm tra chức năng của API, nơi tốt nhất để bắt đầu sẽ là trong tệp routes/api.php mô tả tất cả các điểm cuối API khả dụng. Các phương thức điều khiển sau đó mô tả tất cả các điểm vào trong từng miền của ứng dụng, tức là InvoiceController / QuoteController
Yêu cầu API trung bình sẽ theo đường dẫn này vào ứng dụng.
- Phần mềm trung gian xử lý yêu cầu ban đầu bằng cách kiểm tra tên miền được yêu cầu + cung cấp lớp xác thực.
- Yêu cầu sau đó chuyển vào Form Request (Kiểu được gợi ý trong phương thức điều khiển) được sử dụng để cung cấp quyền hạn và xác thực yêu cầu. Nếu thành công, yêu cầu sau đó được chuyển vào phương thức điều khiển nơi nó được tiêu hóa, đây là một ví dụ:
public function store(StoreInvoiceRequest $request)
{
$invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id));
$invoice = $invoice->service()
->fillDefaults()
->triggeredActions($request)
->adjustInventory()
->save();
event(new InvoiceWasCreated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
return $this->itemResponse($invoice);
}
Ví dụ, chúng tôi đang lưu trữ một hóa đơn mới và chuyển yêu cầu đã xác thực cùng với một nhà máy vào kho lưu trữ hóa đơn, nơi hóa đơn được xử lý và lưu lại.
Hóa đơn được trả về sau đó sẽ chuyển qua lớp dịch vụ của nó (ứng dụng/Dịch vụ/Hóa đơn), tại đó nhiều hành động khác nhau được thực hiện.
Sau đó, một sự kiện được kích hoạt để thông báo cho người nghe trong ứng dụng (app/Providers/EventServiceProvider) thực hiện các tác vụ phụ không chặn
Cuối cùng, hóa đơn được chuyển đổi (app/Transformers/) và trả về dưới dạng phản hồi thông qua Fractal.
Môi trường phát triển
Sử dụng Thiết lập lưu trữ nhanh được mô tả ở trên, bạn có thể nhanh chóng bắt đầu xây dựng môi trường phát triển của mình. Thay vì sử dụng
composer i -o --no-dev
sử dụng
composer i -o
Điều này cung cấp các công cụ dành cho nhà phát triển bao gồm phpunit cho phép chạy bộ kiểm tra.
Nếu bạn đang cân nhắc đóng góp trở lại kho lưu trữ chính, vui lòng thêm vào bất kỳ bài kiểm tra nào cho chức năng/sửa đổi mới. Điều này sẽ làm tăng đáng kể cơ hội được chấp nhận PR của bạn
Ngoài ra, nếu bạn có kế hoạch bổ sung bất kỳ nội dung nào vào kho lưu trữ chính, trước tiên bạn có thể thảo luận với chúng tôi trên Slack, nơi chúng tôi có thể hỗ trợ thông tin kỹ thuật và cung cấp lời khuyên.
Tín dụng
Bảo vệ
Nếu bạn tìm thấy vấn đề bảo mật với ứng dụng này, vui lòng gửi email đến contact@invoiceninja.com . Vui lòng tuân thủ các quy trình tiết lộ có trách nhiệm nếu bạn phát hiện ra vấn đề. Để biết thêm thông tin về tiết lộ có trách nhiệm, vui lòng đọc tại đây .