Я использую Python / Django, но это больше о «модели данных» и о том, как я взаимодействую с информацией - я действительно просто хочу знать, схожу ли я с ума здесь.

Я работаю над небольшим приложением в моей компании (~ 55 сотрудников), которое будет отслеживать доступное время отпуска / болезни. Одной из целей является интеграция «самообслуживания» в нашу интрасеть, чтобы сотрудники могли подавать «Запросы о нерабочем времени» в электронном виде, а не заполнять и передавать документы в отдел кадров.

Очевидно, что это приложение должно поддерживать текущий баланс на одного сотрудника, и будет проверять, что у работника остается достаточно отпуска для того, что они запрашивают.

Как и в случае с финансовым / бухгалтерским программным обеспечением, я знаю, что не обязательно хранить значения с плавающей запятой или просто сохранять единый текущий баланс.

Моя идея состоит в том, чтобы использовать структуру таблицы базы данных, такую как следующая, для хранения временных «кредитов» и «дебетов»:

Employee | Year | Credit/Debit | Amount | Timestamp

«Год» - это год, к которому относится кредит / дебет, потому что время отпуска и болезни обрабатывается на ежегодной основе, а не , а на текущем балансе на одного сотрудника.

Чтобы определить, доступно ли сотрудникам время отпуска / болезни, я бы получил «транзакции» для сотрудника за данный год и нашел баланс.

Я знаю, что пропускаю много информации, но мне было интересно: Кажется ли это разумным способом сделать это, таковым, что он должен быть очень точным, или < Я сильно усложняю это?

3
anonymous coward 27 Авг 2010 в 18:57

4 ответа

Лучший ответ

Если вы думаете, что ваше решение сложное, это не так. Моделирование больничных / отпускных дней как учетных записей, связанных с сотрудниками, является очень хорошей идеей и может быть очень простым.

В простейшем случае вы можете иметь таблицу «транзакции» и таблицу «учетную запись», так что при повторном запуске всех транзакций с начала года (для каждой учетной записи) будет получена сумма, которая точно соответствует балансу.

Сделки

ID | Аккаунт | Дельта | Отметка

Счет

ID | Имя | Сотрудник | Год | Баланс

Транзакции предоставляют контрольный журнал, а баланс обеспечивает точку отсчета для вашей следующей транзакции. Обеспечивая совпадение двух, вы гарантируете согласованность (хотя и не обязательно правильность - это нужно проверять с помощью модульных тестов для каждого типа транзакции, то есть депозита, снятия)

Я бы порекомендовал таблицу «Transaction Detail», которая ссылается на транзакции.

2
Jeff Meatball Yang 27 Авг 2010 в 15:29
How have getting balance Debit-Credit for  running balamace ACCESS DATABASE
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.*"%>
<%@ page import="java.util.Calendar" %>
<%
//java Code
String date = (new java.util.Date()).toString();
String UserName = request.getParameter("UserName");
String CusId= request.getParameter("CusId");
String AccountNo = request.getParameter("AccountNo");
String Debit = request.getParameter("Debit");
String Credit=request.getParameter("Credit");
String Balance=request.getParameter("Balance");
String sDate=request.getParameter("sDate");
try
{
String s="jdbc:odbc:Database1";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn=DriverManager.getConnection(s);
Statement smt=conn.createStatement();
Calendar calendar = Calendar.getInstance();
java.sql.Date startDate = new java.sql.Date(calendar.getTime().getTime());
String sql= "SELECT  sDate, (SUM(Debit)*-1) + SUM(Credit)Balance FROM abcbank GROUP BY  sDate";
ResultSet result = smt.executeQuery(sql);
int count = 0;
while (result.next())
{
result.getString(1,"Debit");
result.getString(2,"Credit");
result.getString(3,"Balance");
result.getDate(4,startDate);

}

String update= "UPDATE abcbank SET Balance =Debit + Balance   WHERE AccountNo="+AccountNo+" ";
PreparedStatement statement = conn.prepareStatement(update);
//statement.setString(1,"AccountNo");
int rowsUpdated = statement.executeUpdate();
if (rowsUpdated ==0)
{
out.println("This Emp does not Exists!");
}
else if(rowsUpdated ==1)
{
out.println("An existing user was updated successfully!");
}
conn.close();
}
catch(Exception ex)
{
System.err.println(ex.getMessage());
  }

%>
</body>
</html>
0
Manish 17 Окт 2016 в 13:07

Я также согласен, что это хорошее начало.

Я не вижу никаких полей для одобрения / неодобрения. Если это приложение предназначено для использования также HR, то их решения должны быть отражены в вашей модели.

Если ХР убирается из картины (что я сомневаюсь, но возможно), тогда нет необходимости делать это; приложение может отслеживать запросы и остаток на счете и немедленно сообщать, действителен ли запрос или нет. Но я подозреваю, что это не может быть так просто. :)

0
John 27 Авг 2010 в 15:24

Это выглядит как хорошее начало. Пара моментов:

  • Кредиты будут автоматически генерироваться системой в начале года, а списания будут создаваться сотрудниками. Должно ли быть поле для указания, кто / что создал транзакцию?

  • Есть ли у вас механизм для указания того, какой вид времени ожидания запрашивается? Я не знаю, на что похожа ваша компания, но некоторые компании по-разному относятся к отпуску и больничному. Кроме того, есть время для попечителя, свободное время для сострадания (например, умирает родственник), свободное время для гражданских и официальных праздников, свободное время для религиозных праздников, свободное время для… ну, вы поняли идею. Может быть, вы хотите, чтобы различные виды отдыха стоили разные суммы кредита. Некоторые организации делают это. Планируете ли вы отслеживать эти разные коды времени? Это то, что вы должны планировать, если вы думаете, что это будет проблемой в будущем?

0
FrustratedWithFormsDesigner 27 Авг 2010 в 15:13