A pet project for processing invoices at a storage facility (warehouse). The app is not finished yet. The backend doesn't exist yet,
so it is simulated within the app.
The app is designed to be used in the following workflow:
- An employee at the office receives an invoice from a supplier;
- The employee enters data from the invoice into the backend's DB using a GUI app or a web frontend;
- The supplier ships products listed in the invoice to the company's warehouse;
- An employee at the warehouse finds the corresponding invoice in the app and accepts it for processing;
- He or she scans or enters manually serial numbers (possibly, some other info) of the products using the app, then submits the collected data to the backend;
- An employee at the office reviews the data and confirms the successful receipt of the products;
- The data is kept on the backend for future reference (e.g. warranty service requests).
The app is built using the clean architecture approach. The following diagram depicts the objects and relationships used in this implementation of the clean architecture:
The UI layer is implemented using the MVI pattern. Although there're many existing libraries, I've decided to implement it myself to get better understanding on how it works. The result is far from ideal but it works as intended. The implementation was inspired by:
- The State of Managing State with RxJava by Jake Wharton
- Reactive Apps with Model-View-Intent by Hannes Dorfmann
- Kaushik Gopal's approach
The gist of the implementation is depicted on the following diagram:
- Frameworks, libraries & tools: Koin, Moshi, Retrofit, Okhttp, RxJava2 + RxKotlin, RxBinding, FastAdapter, Glide, zxing-android-embedded ,leinardi.android:speed-dial, Timber, LeakCanary, Mockito, RESTMock, detekt
- Free logo by LogoMakr.com
- Diagrams by Lucidchart.com
- Screenshots by theapplaunchpad.com
Copyright 2019 Evgeniy Plokhov
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.



