Budowanie dashboardu pracownika

Budowanie dashboardu pracownika

Wymóg  

Stwórz pulpit dla pracowników z przyciskami, które pomogą pracownikom zameldować się i wymeldować, znaleźć łączną liczbę przepracowanych godzin i złożyć wniosek o urlop.

Przypadek użycia  

Aplikacja do zarządzania pracownikami ma pulpit nawigacyjny dla swoich pracowników. Gdy tylko pracownik się zaloguje, odnotowywany jest jego czas zameldowania. Podobnie, gdy się wylogują, odnotowywany jest ich czas wymeldowania. W ten sposób ich pełne godziny pracy są obliczane automatycznie. W tym panelu pracownik może również ubiegać się o urlop.
 

Kroki do naśladowania

1.Utwórz formularze z następującymi szczegółami:
Formularz
Nazwa łącza formularza
Typ pola
Nazwa pola
Nazwa łącza pola
Dodaj pracownika
Dodaj_Pracownika
Nazwa
Nazwa
Nazwa
Email
Oficjalny e-mail
Oficjalny e-mail
Telefon
Telefon
Numer telefonu
Dodaj szczegóły zameldowania
 
Add_Check_In_Out_Details
Wyszukiwanie (Add_Employee)
Pracownik
Pracownik
Data-Godzina
Zameldować się
Zameldować się
Data-Godzina
Sprawdź
Sprawdź
Pojedyncza linia
Suma godzin
Suma godzin
Zastosuj urlop
 
 
 
 
Wakacje
Zastosuj urlop
 
 
 
 
Wakacje
Wyszukiwanie (Add_Employee)
Pracownik
Pracownik
Pojedyncza linia
Typ urlopu
Typ urlopu
Data-Godzina
Z
Z
Data-Godzina
do
do
Pojedyncza linia
Nazwa święta
Nazwa święta
Data
Data
Pole_daty
 
Zanim zaczniemy, dodajmy kilka rekordów do formularza Dodaj pracownika i formularza Święta.
 
Nasz pulpit nawigacyjny pracownika będzie zawierał przyciski do ubiegania się o urlop, zameldowania i wymeldowania, które wykonają odpowiednie czynności. Przyjrzyjmy się im po kolei, zaczynając od akcji Apply Leave.
 
Wypełnimy pole Add Employee formularza Apply Leave jako aktualnie zalogowany użytkownik i wyłączymy je, aby użytkownik nie mógł go zmienić. Stwórzmy przepływ pracy, aby to osiągnąć.
 
2. Utwórz przepływ pracy, który zostanie wykonany podczas ładowania formularza Aplikuj urlop, wypełnij pole Dodaj pracownika adresem e-mail logowania użytkownika i wyłącz go.
 
3. Kliknij Dodaj nową akcję i dodaj poniższy kod w otwartym edytorze Deluge:
  1. //Find the ID of the Add_Employee record with the login user email ID
  2. input.Employee=Add_Employee[Official_Email==zoho.loginuserid].ID;

  3. //Disable the Add Employee field
  4. disable Employee;
Teraz stwórzmy funkcje do ewidencjonowania i wymeldowania.
 
4.  Utwórz funkcję, aby zaewidencjonować pracownika.
 
5. Dodaj poniższy kod do edytora Deluge:
  1. void checkIn()
  2. {
  3. //Get the logged-in employee record ID
  4.  employee = Add_Employee[Official_Email == zoho.loginuserid];

  5.  //Check if the employee is already checked-in. The critiera Check_In is today is used to check if the Check_In date-time field has date as today (that day)
  6. alreadyCheckedIn = Add_Check_In_Out_Details[Employee == employee.ID && Check_In is today];
  7. //Insert a record only if there is no check-in
  8.  if(alreadyCheckedIn.count() == 0)
  9.  {
  10.   insert into Add_Check_In_Out_Details
  11.   [
  12.    Added_User=zoho.loginuser
  13.    Employee=employee.ID
  14.    Check_In=zoho.currenttime
  15.   ]
  16.  }
  17. }

6. Podobnie utwórz funkcję do wypisania pracownika.
 
7. Dodaj poniższy kod do edytora Deluge:
  1. void checkOut()
  2. {
  3. //Get the logged-in employee record ID
  4.  employee = Add_Employee[Official_Email == zoho.loginuserid].ID;

  5. //Get the Employee's already checked-in record from Add_Check_In_Out_Details 
  6.  current_day_entry = Add_Check_In_Out_Details[Employee == employee && Check_In is today];

  7. //Assign check-out value
  8.  current_day_entry.Check_Out=zoho.currenttime;

  9. //Calculate Total_Hours from the timestamps
  10.  time = (current_day_entry.Check_Out - current_day_entry.Check_In);
  11.  seconds = time / 1000;
  12.  minutes = seconds / 60;
  13.  hours = minutes / 60;
  14.  h = hours.floor();
  15.  m = minutes - h * 60;
  16.  mins = m.floor();
  17.  if(mins < 10)
  18.  {
  19.   mins = "0" + mins;
  20.  }

  21. //Set the total working hours
  22.  current_day_entry.Total_Hours=h + ":" + mins + " Hrs";
  23. }

Teraz, gdy wszystkie nasze funkcjonalności są gotowe, przejdźmy do tworzenia dashboardu.
 
8. Utwórz stronę o nazwie Dashboard . Przeciągnij do niego fragment ZML i fragment kodu HTML.

Sprawdź, czy w załącznikach nie ma pliku z następującymi fragmentami kodu skonsolidowanego w jeden działający skrypt.
Dla lepszego zrozumienia kod ZML/HTML jest podzielony na fragmenty. Wyjaśniamy fragmenty kodu, a następnie rozmieszczamy je odpowiednio w celu wstawienia ich do edytora ZML/HTML.
 
Zacznijmy od fragmentu kodu ZML . Spowoduje to przytrzymanie następujących przycisków: Zastosuj Opuść , Zaewidencjonuj i Wyewidencjonuj .
 
Fragment a
Nazwisko pracownika jest wyświetlane za pomocą tagów <text>. Znacznik <button> służy do tworzenia przycisku Apply Leave, który jednym kliknięciem otworzy formularz Apply Leave.
  1. <pr>
  2. <pc width='80%' bgColor="#ececec" hAlign="left" paddingLeft="10px"> 

  3. //Display the name of the logged-in employee  
  4.    <text bold='true' value='Welcome <%=getUser.Name%>.' size='5' color='#3d566e' type='Text' textAlign='left'> 
  5.    </text>         
  6.   </pc>
  7.   <pc  width='20%' hAlign='left' padding="10px" vAlign='middle'>       
  8.    <pr width='100%' height='fill'>     
  9.     <pc hAlign="center">

  10. //Create a button that will open the Apply Leave form on click
  11.      <button bgColor="#3d566e" action='Form' componentLinkName='Apply_Leave' size='1' text="Apply Leave"/>
  12.     </pc>
  13.    </pr>    
  14.   </pc>   
  15.  </pr>

Fragment b
Przycisk Zamelduj się powinien być wyświetlany tylko wtedy, gdy pracownik jeszcze się zameldował. Sprawdzimy, czy w polu Dodaj szczegóły zameldowania/wymeldowania jest wpis dla bieżącego pracownika dzisiaj. Jeśli jest dostępny, pokazujemy godzinę zameldowania. Jeśli nie, pokazujemy przycisk Zamelduj. W podobny sposób pokazujemy przycisk Do kasy.
  1. <pc  width='33%' hAlign='left' padding="10px" vAlign='middle'>       
  2. <pr width='100%' height='fill'>     
  3.   <pc hAlign="center">
  4. <%

  5. //Find if the employee has already checked in
  6.   alreadyCheckedIn = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today].count(ID);
  7.   if(alreadyCheckedIn == 0)
  8.   {

  9. //If employee has not checked in, show the button
  10.   %>

  11. //Button's action is linked to the checkIn function created in Step 4 & 5. Show a message after function execution.
  12. <button bgColor="#14b474" action='Function' functionName='checkIn' successMsg='You have checked in.' size='3' text="Check In"/>
  13. <%
  14.   }
  15.   else
  16.   {

  17. //If the employee has checked-in, lets show the time of check-in
  18.    checkedIn = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today];
  19.   %>
  20. <text bold='true' value='Checked-in at <%=checkedIn.Check_In%>.' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
  21. <%
  22.   }
  23.   %>
  24. </pc>
  25.   </pr>    
  26.  </pc>   
  27.  <pc  width='33%' hAlign='center' padding="10px" vAlign='middle'>       
  28.      <pr width='100%' height='fill'>     
  29.       <pc hAlign="center">
  30. <%

  31. //Find if the employee has already checked out
  32.   alreadyOut = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today && Check_Out is today].count(ID);
  33.   if(alreadyOut == 0)
  34.   {

  35. //If employee has not checked out, show the button
  36.    %>

  37. //Button's action is linked to the checkOut function created in Step 6 & 7. Show a message after function execution.
  38. <button bgColor="#fd3a36" action='Function' functionName='checkOut' successMsg='You have checked out.' size='3' text="Check Out"/>
  39. <%
  40.   }
  41.   else
  42.   {

  43. //Find if the employee has already checked out
  44. alreadyCheckedOut = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today && Check_Out is today];

  45. //If the employee has checked-out, lets show the time of check-out
  46.    %>
  47. <text bold='true' value='Checked-out at <%=alreadyCheckedOut.Check_Out%>.' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
  48. <%
  49.   }
  50.   %>
  51. </pc>
  52.   </pr>    
  53.  </pc>  
  54.  <pc  width='33%' hAlign='center' padding="10px" vAlign='middle'>       
  55.   <pr width='100%' height='fill'>     
  56.    <pc hAlign="center">

  57. //Show the total hours checked-in
  58.     <text bold='true' value='Total Hours : <%=alreadyCheckedOut.Total_Hours%>' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
  59.    </pc>
  60.   </pr>    
  61. </pc>    
  62.  </pr>

Fragment c
Umieść powyższe fragmenty odpowiednio, jak pokazano poniżej, aby uzyskać ostateczny kod ZML:
  1. <%{

  2. //Get the logged in user record
  3. getUser = Add_Employee[Official_Email == zoho.loginuserid];
  4. %>
  5. <panel>
  6. //Insert Snippet a
  7. //Insert Snippet b
  8. </panel>
  9. <%}%>

Popracujmy teraz nad wpisem świątecznym. Użyjemy fragmentu kodu HTML, aby utworzyć naszą wersję wykazu, aby wyświetlać nadchodzące święta na pulpicie nawigacyjnym.
  1. <%{
  2.  %>
  3. <style>
  4. h3 {
  5.  padding: 10px;
  6. }
  7. #zohoreportel
  8. {
  9.  height : 400px !important;
  10. }
  11. .holidayTable
  12. {
  13.  width: 96%;
  14.     border-collapse: collapse;
  15.     margin: 1% 2%;
  16. }

  17. .holidayTable td
  18. {
  19.  padding: 10px;
  20.     font-size: 14px;
  21.     text-align: center;
  22.     border-bottom: 1px solid #f1f1f1;
  23. }
  24. table.holidayTable > tbody > tr:first-child > td
  25. {
  26.  font-weight: 600;
  27.     font-size: 15px;
  28.     background: #ececec;
  29. }
  30. </style>
  31. <div style="height : 450px;overflow:scroll;">
  32. <h3>Upcoming Holidays</h3>
  33. <%

  34. //Get the list of holidays until December
  35.  holidays = Holidays[Date_field > zoho.currentDate];
  36.  if(holidays.count() != 0)
  37.  {
  38.   %>
  39. <table class="holidayTable">
  40.  <tr>
  41.  <td>Holiday Name</td>
  42.  <td>Date</td>
  43.  </tr>
  44. <%
  45.   for each  rec in holidays
  46.   {
  47.    %>
  48. <tr>
  49.  <td><%=rec.Holiday_Name%></td>
  50.  <td><%=rec.Date_field%></td>
  51.  </tr>
  52. <%
  53.   }
  54.   %>
  55. </table>
  56. <%
  57.  }
  58.  else
  59.  {
  60.   %>
  61. <div>No holidays Available!</div>
  62. <%
  63.  }
  64.  %>
  65. </div>
  66. <%
  67. }%>

Zobacz jak to działa         

    • Related Articles

    • Synchronizuj moduł klientów Quickbooks z Zoho Creator

      Wymóg Użyj źródła danych, aby zsynchronizować moduł klientów Quickbooks z aplikacją Zoho Creator. Przypadek użycia   Firma logistyczna prowadzi swoje dane klientów i konta w Quickbooks. Do rezerwacji korzystają z aplikacji do zarządzania logistyką ...
    • Okresowo przesyłaj pliki z Zoho Creator do Zoho Workdrive

      Wymóg Przeprowadź integrację między Zoho Creator i Zoho Workdrive i korzystaj z harmonogramów, aby co miesiąc przesyłać pliki z Creator do Workdrive. Przypadek użycia   Aplikacja do śledzenia projektów przechowuje pliki raportów ukończonych projektów ...
    • Wyodrębnij zawartość pliku ZIP i wyślij e-mailem rozpakowane pliki

      Wymóg   Użyj Deluge, aby wyodrębnić plik ZIP i wysłać go pocztą e-mail jednym kliknięciem. Przypadek użycia   Aplikacja do zarządzania zasobami ludzkimi zawiera trzy formularze: Dodaj pracownika , Employee Payslips i Download My Payslips . Formularz ...
    • Niestandardowe uprawnienia dostępu dla użytkowników aplikacji

      Wymóg Utwórz niestandardowe uprawnienia dla aplikacji i przypisz je odpowiednim użytkownikom. Przypadek użycia W aplikacji do zarządzania zasobami ludzkimi użytkownikom należy przypisać różne poziomy dostępu w zależności od ich przeznaczenia. Na ...
    • Kalkulacja czynszu na podstawie wielu wartości wybranych przez klientów na wydarzeniu

      Wymóg Oszacuj czynsz za nieruchomość na podstawie daty i godziny rezerwacji, a także liczby obecności. Przypadek użycia Wynajmowana jest sala bankietowa w hotelu. Oto struktura cenowa hali: Dzień Cena podstawowa (w USD) Liczba gości standardowych (w ...