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:
- //Find the ID of the Add_Employee record with the login user email ID
- input.Employee=Add_Employee[Official_Email==zoho.loginuserid].ID;
- //Disable the Add Employee field
- 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:
- void checkIn()
- {
- //Get the logged-in employee record ID
- employee = Add_Employee[Official_Email == zoho.loginuserid];
- //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)
- alreadyCheckedIn = Add_Check_In_Out_Details[Employee == employee.ID && Check_In is today];
- //Insert a record only if there is no check-in
- if(alreadyCheckedIn.count() == 0)
- {
- insert into Add_Check_In_Out_Details
- [
- Added_User=zoho.loginuser
- Employee=employee.ID
- Check_In=zoho.currenttime
- ]
- }
- }
6. Podobnie utwórz funkcję do wypisania pracownika.
7. Dodaj poniższy kod do edytora Deluge:
- void checkOut()
- {
- //Get the logged-in employee record ID
- employee = Add_Employee[Official_Email == zoho.loginuserid].ID;
- //Get the Employee's already checked-in record from Add_Check_In_Out_Details
- current_day_entry = Add_Check_In_Out_Details[Employee == employee && Check_In is today];
- //Assign check-out value
- current_day_entry.Check_Out=zoho.currenttime;
- //Calculate Total_Hours from the timestamps
- time = (current_day_entry.Check_Out - current_day_entry.Check_In);
- seconds = time / 1000;
- minutes = seconds / 60;
- hours = minutes / 60;
- h = hours.floor();
- m = minutes - h * 60;
- mins = m.floor();
- if(mins < 10)
- {
- mins = "0" + mins;
- }
- //Set the total working hours
- current_day_entry.Total_Hours=h + ":" + mins + " Hrs";
- }
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.
- <pr>
- <pc width='80%' bgColor="#ececec" hAlign="left" paddingLeft="10px">
- //Display the name of the logged-in employee
- <text bold='true' value='Welcome <%=getUser.Name%>.' size='5' color='#3d566e' type='Text' textAlign='left'>
- </text>
- </pc>
- <pc width='20%' hAlign='left' padding="10px" vAlign='middle'>
- <pr width='100%' height='fill'>
- <pc hAlign="center">
- //Create a button that will open the Apply Leave form on click
- <button bgColor="#3d566e" action='Form' componentLinkName='Apply_Leave' size='1' text="Apply Leave"/>
- </pc>
- </pr>
- </pc>
- </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.
- <pc width='33%' hAlign='left' padding="10px" vAlign='middle'>
- <pr width='100%' height='fill'>
- <pc hAlign="center">
- <%
- //Find if the employee has already checked in
- alreadyCheckedIn = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today].count(ID);
- if(alreadyCheckedIn == 0)
- {
- //If employee has not checked in, show the button
- %>
- //Button's action is linked to the checkIn function created in Step 4 & 5. Show a message after function execution.
- <button bgColor="#14b474" action='Function' functionName='checkIn' successMsg='You have checked in.' size='3' text="Check In"/>
- <%
- }
- else
- {
- //If the employee has checked-in, lets show the time of check-in
- checkedIn = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today];
- %>
- <text bold='true' value='Checked-in at <%=checkedIn.Check_In%>.' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
- <%
- }
- %>
- </pc>
- </pr>
- </pc>
- <pc width='33%' hAlign='center' padding="10px" vAlign='middle'>
- <pr width='100%' height='fill'>
- <pc hAlign="center">
- <%
- //Find if the employee has already checked out
- alreadyOut = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today && Check_Out is today].count(ID);
- if(alreadyOut == 0)
- {
- //If employee has not checked out, show the button
- %>
- //Button's action is linked to the checkOut function created in Step 6 & 7. Show a message after function execution.
- <button bgColor="#fd3a36" action='Function' functionName='checkOut' successMsg='You have checked out.' size='3' text="Check Out"/>
- <%
- }
- else
- {
- //Find if the employee has already checked out
- alreadyCheckedOut = Add_Check_In_Out_Details[Employee == getUser.ID && Check_In is today && Check_Out is today];
- //If the employee has checked-out, lets show the time of check-out
- %>
- <text bold='true' value='Checked-out at <%=alreadyCheckedOut.Check_Out%>.' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
- <%
- }
- %>
- </pc>
- </pr>
- </pc>
- <pc width='33%' hAlign='center' padding="10px" vAlign='middle'>
- <pr width='100%' height='fill'>
- <pc hAlign="center">
- //Show the total hours checked-in
- <text bold='true' value='Total Hours : <%=alreadyCheckedOut.Total_Hours%>' size='3' color='#3d566e' type='Text' textAlign='left'> </text>
- </pc>
- </pr>
- </pc>
- </pr>
Fragment c
Umieść powyższe fragmenty odpowiednio, jak pokazano poniżej, aby uzyskać ostateczny kod ZML:
- <%{
- //Get the logged in user record
- getUser = Add_Employee[Official_Email == zoho.loginuserid];
- %>
- <panel>
- //Insert Snippet a
- //Insert Snippet b
- </panel>
- <%}%>
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.
- <%{
- %>
- <style>
- h3 {
- padding: 10px;
- }
- #zohoreportel
- {
- height : 400px !important;
- }
- .holidayTable
- {
- width: 96%;
- border-collapse: collapse;
- margin: 1% 2%;
- }
- .holidayTable td
- {
- padding: 10px;
- font-size: 14px;
- text-align: center;
- border-bottom: 1px solid #f1f1f1;
- }
- table.holidayTable > tbody > tr:first-child > td
- {
- font-weight: 600;
- font-size: 15px;
- background: #ececec;
- }
- </style>
- <div style="height : 450px;overflow:scroll;">
- <h3>Upcoming Holidays</h3>
- <%
- //Get the list of holidays until December
- holidays = Holidays[Date_field > zoho.currentDate];
- if(holidays.count() != 0)
- {
- %>
- <table class="holidayTable">
- <tr>
- <td>Holiday Name</td>
- <td>Date</td>
- </tr>
- <%
- for each rec in holidays
- {
- %>
- <tr>
- <td><%=rec.Holiday_Name%></td>
- <td><%=rec.Date_field%></td>
- </tr>
- <%
- }
- %>
- </table>
- <%
- }
- else
- {
- %>
- <div>No holidays Available!</div>
- <%
- }
- %>
- </div>
- <%
- }%>
Zobacz jak to działa