eOfis ERP System

Worked as a full-stack developer on a .NET-based ERP system at my company.

eOfis ERP System 1
eOfis ERP System 2

Project Description

My General Role and Responsibilities

I work as a full-stack developer on the project. On the backend, I develop RESTful APIs using .NET Core. I manage data operations using SQL and ensure database normalization. I create scheduled tasks with Hangfire and manage CI/CD processes using GitHub Actions. I publish APIs on the server and take full responsibility for server management. I also improve software quality by writing unit tests and configure logging mechanisms. On the frontend, I develop user-friendly interfaces using React, HTML, CSS, and JavaScript.

Key Contributions

I migrated the entire project to the web to improve accessibility. I implemented and integrated key modules such as custom contract integration, quotation infrastructure, iyzico payment system, and scheduled reporting tasks via Hangfire. I especially made the contract and quotation infrastructure fully dynamic to deliver personalized content for each user.

Contract Module

I stored both Turkish and English contract texts dynamically in the SQL database to generate personalized contracts for each client. This enabled a flexible system that can deliver tailored content.

Quotation Module

I developed a dynamic PDF generation system for personalized quotations per customer, using templates stored on the server.

Payment Integration and Automated Collection

Through iyzico integration, I enabled users to make direct payments within the system. Additionally, I set up an automatic payment request system for indebted companies, running twice daily via Hangfire, eliminating the need for manual follow-ups.

Reporting Infrastructure

I developed SQL procedures to generate critical reports such as accountant summaries, payment statuses, delayed offices, and current accounts. These are triggered by Hangfire and sent to managers via email at regular intervals.

Migration Process (.NET → .NET Core)

One of our major ongoing tasks is migrating the entire system from .NET Framework to .NET Core, making it fully web-based and platform-independent for global accessibility.

Server Management

The servers are hosted in the Gebze Data Center rented via Turkcell Superonline, while backups and additional storage are provided through Microsoft Azure.

Version Control System

The project uses SVN hosted on VisualSVN Server. Developers access repositories using TortoiseSVN, and access rights are managed individually per repository.

Project Structure and Modules

The project includes client applications, RESTful APIs, and MSSQL databases. The OfficeSharpERP project consists of 4 databases, 1 FTP server, 16 REST APIs, 7 client programs, 2 mobile apps, and 3 web panels.

OfficeSharpERP System Flow

Client programs do not directly access the database. All data access is handled through REST APIs, isolating business logic from the client and enhancing security. Authorization checks are performed at the API layer.

Database Structure

Main databases used include:

Zeugma: Stores main user and license information.

OfficeSharpERP: Contains all business logic data for the admin panel.

OfficeSharpReport: Contains denormalized data tables for reporting.

Hangfire: Stores all scheduled task information and handles auto-cleanup.

FTP Server Usage

The FTP server is used to host client program versions, project backups, third-party software, source code, invoice XMLs, and archived contract/quotation files.

REST API Architecture

The API structure follows MVC (Model-View-Controller) architecture. Each module is implemented as an independent API project. Data models are exposed via DTOs, mapped using AutoMapper.

Worker Structure

Used to simplify repetitive data operations in the API. Each worker performs specific tasks such as reading, adding, deleting, or updating data. Workers operate based on defined rules and can automate DB tasks.

ReadWorker

Fetches data from tables or views. Can return all data or filtered results (e.g., records with CompanyId = 2). Enables simple queries without complex SQL.

CreateWorker

Used for adding new records. Supports both single and batch inserts and automatically records the user who created the entry.

DeleteWorker

Deletes rows from the database, either individually, in batches, or based on defined rules. Cannot run without a condition to avoid mass deletions.

UpdateWorker

Updates the contents of records, supporting single, batch, or conditional updates.

ReadWorkerUtility

Fetches all data from a table including all rows and columns.

Validation

Requests received by the API are validated via the Validate function within the respective worker. If validation passes, it returns an empty string; otherwise, it returns an error message. The worker proceeds based on this result.

Request Authorization - Token

API requests require a valid token. Upon login, the system generates a GUID token, stores it in the database, and sends it to the user. Each request must include this token. Requests with invalid or missing tokens are rejected.

AuthActionFilter

Performs checks before and after each API request. It is added to controllers to handle logging and authorization. Validates token and user permissions before processing the request.

Database Management

I also manage the database, ensuring regular backups, data synchronization, logging, and performance optimization using important triggers.

Backup

Database backups are automatically taken daily at 02:00 via a Hangfire scheduler in the Scheduler API project. The sBackup procedure is triggered to back up OfficeSharpERP and OfficeSharpReport databases and uploads them to Azure.

Synchronization

Updates made on the development server must be synced with live databases using Devart dbForge Studio for SQL Server to avoid manual errors.

Logging

All insert, update, and delete operations are logged automatically by the system.

Key Triggers

Some operations are performed asynchronously via triggers to avoid affecting API response time. These operations are written to an intermediate table and processed by CRON jobs at set intervals.

Technologies Used

.NET
C#
REST API
N-tier Architecture
AutoMapper
Hangfire
EF Core
IIS
Amazon S3
SQL
JWT
ASP.NET Core Identity
xUnit
GitHub Actions
FluentValidation
React
TypeScript
JavaScript
HTML
CSS
Tailwind CSS
MobX
Axios
Visual Studio
Git