Epesi ENS | Epesi Academy | epesi.cloud PaaS | GitHub

Help Me! | Download from SourceForge Download Epesi BIM Free & Open Source CRM


Witam,

Jak zrobić modułu analogiczny jak obecne uwagi który jest widoczny pod firmą? Chodzi mi o nowy moduł pod nową nazwą ale o funkcjonalności identycznej jak uwagi.
Dodatkowo będę potrzebował aby ten moduł i wpisy w nim był widoczny dla wszystkich ale wpisy mogły robić tylko wybrane osoby.

Jak do tego "podejść" ?

Pozdrawiam,

Daniel

Uwagi - chodzi o notatki?
Notatki to zwykły rekordset - można zmienić uprawnienia w panelu admina.
Jeśli chodzi o dodanie drugiej zakładki, z osobnymi notatkami to trochę więcej pracy - trzeba stworzyć mały moduł, który wyświetli odpowiednie rekordy notatek. Jeśli o to chodzi to w miarę moich możliwości postaram się nakreślić zarys jak to zrobić. Możliwe, że dopiero po weekendzie.

Pozdrawiam,
Adam

Dokładnie o to chodzi. Ja w tłumaczeniu mam "uwagi". ale to notatki oryginalnie 🙂
Czekam na info i mam nadzieję że uda mi się coś takiego stworzyć.

Pozdrawiam,

Daniel

4 days later

A czy nie da się zrobić 1:1 dupikatu "notatek" pod inną nazwą?

Pozdrawiam,

Daniel

Gdyby zrobić duplikat 1:1 to by się wyświetlały te same notatki w obu zakładkach. Dlatego właśnie trzeba zmienić kod.

Opiszę moduł w skrócie podając tylko wnętrzności funkcji do wykonania. Pliki i katalog musisz stworzyć sam.
Moduł możesz nazwać jak chcesz, ale polecam dać go do osobnego katalogu - np modules/Custom/* - gwiazdka to nazwa modułu

Instalacja modułu - metoda install w *Install.php:


$tab = 'company'; // notatki do firm
$label = _V('Inne notatki'); // etykieta do wyświetlenia
Utils_RecordBrowserCommon::new_addon($tab, $this->get_type(), 'body', $label);
return true;

funkcja body w głównym pliku modułu *_0.php


function body($record, $rb) {
$group = $rb->tab . '__my_notes/' . $record['id']; // <-- to jest kluczowy fragment który odróżnia normalne notatki od tych innych
$notes = $this->init_module('Utils/Attachment', $group);
$notes->set_view_func(array('Utils_RecordBrowserCommon','create_default_linked_label'),array($rb->tab, $record['id']));
$this->display_module($notes);
}

mam nadzieję, że się nie pomyliłem, bo nie testowałem tego kodu

Pozdrawiam,
Adam

A w którym katalogu znajdują się pliki tego głównego modułu notatki?
Bo jak rozumemiem mam je zmodyfikować i dać do: modules/Custom/


Pozdrawiam,

Daniel

Nie - źle rozumiesz 🙂
Masz zrobić malutki moduł, który zrobi użytek z Utils/Attachment.
Proponuję zacząć od tego http://www.epesi.org/HelloWorld

Pozdrawiam,
Adam

Masz rację - zaczynam od podstaw.
Ale jak zrobiłem sobie przykład HelloWorld i zrobiłem odnowienie modułów to mam błąd:

There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.

Czyli gdzies na stronie http://www.epesi.org/HelloWorld jest jakiś błąd.

Dodatkowo mam pytanie jaki wpis powinienem dać dla function uninstall?

Pozdrawiam,

Daniel

Jak mi się już udało wyświetlić moduł w liście to mi wali błędem przy instalacji:


Type: E_USER_ERROR (256)
Message: Module Custom_WarunkiHandlowe: Invalid install file Custom/WarunkiHandlowe
File: /var/www/include/module_manager.php
Line=50
error backtrace:
[PHP core called function]
function called: handle_epesi_error(256, "Module Custom_WarunkiHandlowe: Invalid install file Custom/WarunkiHandlowe", "/var/www/include/module_manager.php", 50, Array ("Custom_WarunkiHandlowe", "Custom/WarunkiHandlowe", "WarunkiHandlowe", "/var/www/modules/Custom/WarunkiHandlowe/WarunkiHandloweInstall.php", 1, "Custom_WarunkiHandloweInstall"))

File: /var/www/include/module_manager.php
line 50
function called: trigger_error("Module Custom_WarunkiHandlowe: Invalid install file Custom/WarunkiHandlowe", 256)

File: /var/www/include/module_manager.php
line 286
function called: include_install("Custom_WarunkiHandlowe")

File: /var/www/modules/Base/Setup/SetupCommon_0.php
line 42
function called: list_modules()

File: /var/www/modules/Base/Setup/Setup_0.php
line 605
function called: refresh_available_modules()

[PHP core called function]
function called: parse_modules_folder_refresh()

File: /var/www/include/module.php
line 842
function called: call_user_func_array(Array ("Base_Setup", "parse_modules_folder_refresh"), Array ())

File: /var/www/include/module.php
line 773
function called: get_html_of_module(Object (Base_Setup), Array (true), "admin")

File: /var/www/modules/Base/EpesiStore/EpesiStore_0.php
line 81
function called: display_module("Object (Base_Setup)", Array (true), "admin")

[PHP core called function]
function called: setup_admin(Object (Base_Setup))

File: /var/www/modules/Utils/TabbedBrowser/TabbedBrowser_0.php
line 115
function called: call_user_func_array(Array (Object (Base_EpesiStore), "setup_admin"), Array (Object (Base_Setup)))

File: /var/www/modules/Utils/TabbedBrowser/TabbedBrowser_0.php
line 81
function called: display_contents(Array (0, Array (#2), Array (#1), false), 0)

[PHP core called function]
function called: body()

File: /var/www/include/module.php
line 853
function called: call_user_func_array(Array (Object (Utils_TabbedBrowser), "body"), Array ())

File: /var/www/include/module.php
line 773
function called: get_html_of_module(Object (Utils_TabbedBrowser), null, null)

File: /var/www/modules/Base/EpesiStore/EpesiStore_0.php
line 64
function called: display_module("Object (Utils_TabbedBrowser)")

File: /var/www/modules/Base/EpesiStore/EpesiStore_0.php
line 33
function called: manage()

[PHP core called function]
function called: admin()

File: /var/www/include/module.php
line 853
function called: call_user_func_array(Array (Object (Base_EpesiStore), "admin"), Array ())

File: /var/www/include/module.php
line 773
function called: get_html_of_module(Object (Base_EpesiStore), null, "admin")

File: /var/www/include/module.php
line 946
function called: display_module("Object (Base_EpesiStore)", null, "admin")

File: /var/www/modules/Base/Admin/Admin_0.php
line 31
function called: pack_module("Base_EpesiStore", null, "admin")

[PHP core called function]
function called: body()

File: /var/www/include/module.php
line 853
function called: call_user_func_array(Array (Object (Base_Admin), "body"), Array ())

File: /var/www/include/module.php
line 773
function called: get_html_of_module(Object (Base_Admin), null, null)

File: /var/www/modules/Base/Box/Box_0.php
line 151
function called: display_module("Object (Base_Admin)")

File: /var/www/include/epesi.php
line 241
function called: body()

File: /var/www/include/epesi.php
line 286
function called: go(Object (Base_Box))

File: /var/www/process.php
line 35
function called: process("__action_module__=%2FBase_Box%7C0%2FBase_Admin%7Cmain_0%2FBase_EpesiStore%7C0%2FBase_Setup%7C0&%2FBase_Box%7C0%2FBase_Admin%7Cmain_0%2FBase_EpesiStore%7C0%2FBase_Setup%7C0_callback_165e39a458740199a3ba386b41aacffe=1", false)

Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=20
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \')\'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=20
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=26
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \')\'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=26
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');Type: E_COMPILE_ERROR (64)
Message: Cannot redeclare class Custom_UniqueTaxIDInstall
File: /var/www/modules/Custom/WarunkiHandlowe/WarunkiHandloweInstall.php
Line=47
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_COMPILE_ERROR (64)
Message: Cannot redeclare class Custom_UniqueTaxIDInstall
File: /var/www/modules/Custom/WarunkiHandlowe/WarunkiHandloweInstall.php
Line=47
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');Type: E_PARSE (4)
Message: syntax error, unexpected T_STRING, expecting '{'
File: /var/www/modules/Custom/WarunkiHandlowe/WarunkiHandloweInstall.php
Line=5
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_PARSE (4)
Message: syntax error, unexpected T_STRING, expecting \'{\'
File: /var/www/modules/Custom/WarunkiHandlowe/WarunkiHandloweInstall.php
Line=5
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=22
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \')\'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=22
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=26
error backtrace:
[PHP core called function]
function called: check_for_fatal()

Epesi.text('Type: E_PARSE (4)
Message: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \')\'
File: /var/www/modules/Custom/HelloWorld/HelloWorldInstall.php
Line=26
error backtrace:
[PHP core called function]
function called: check_for_fatal()

','error_box','p');Epesi.append_js('$(\'debug_content\').style.display=\'block\';alert(\'There was an error in one of epesi modules. Details are displayed at the bottom of the page, please send this information to system administrator.\');');

I moim zdaniem potrzebujemy też zdefiniować funkcję uninstall


Pozdrawiam,


Daniel

Obstawiam, że nie zmieniłeś nazwy klasy.

Uninstall to będzie:

$tab = 'company'; // notatki do firm
Utils_RecordBrowserCommon::delete_addon($tab, $this->get_type(), 'body');
return true;

Teraz aby do tej zakładki ograniczyć dostęp pownieniem w przeglądace rekorów w panelu adm mieć ten modul? Ale go nie ma.

Dostęp tutaj ogranicza się tak samo jak dla zwykłych notatek (bo to są zwykłe notatki, tylko podpięte do specjalnej grupy). Możliwe, że to jest element, którzy przeoczyłem podpowiadając Ci rozwiązanie. Możesz opisać jakie uprawnienia chciałbyś uzyskać?

Chciałbym uzyskać wariant gdzie manager ma prawo dodawać/edytować/usuwać te nowe notatki a pracownik tylko oglądać bez prawa edycji i kasowania

Pozdrawiam,

Daniel

A zwykłe notatki ma mieć prawo dodawać również zwykły pracownik?

Tak zwykłe notatki są dla wszystkich - dlatego chciałem zrobić te dodatkowe żeby było oddzielnie zarządzane. W tych dodatkowych notatkach są informacje które wpisywać może tylko kierownik a zwykłe są dla wszystkich.

10 days later

Przepraszam za brak odpowiedzi.

W takiej sytuacji faktycznie jest to problemem.
A nie myślałeś o innym rozwiązaniu? Teraz dopiero przyszło mi coś takiego do głowy.
Jakby do notatek dodać nowe pole typu commondata do oznaczania notatek jako "zaufane", "dla kierownika" czy jakoś tak to nazwać. Wtedy można ustawić, żeby kierownik widział te notatki, a nikt inny nie. Nie potrzebna byłaby nowa zakładka, a w razie potrzeby można notatki posortować po tym polu i dostać wszystkie u góry listy.

Każda metoda jest do przyjęcia 🙂
Natomiast chodzi o to aby notatki zaufane mógł wpisywać i edytować "kierownik" a inny pracownik tylko przeglądać. Tam mają być wpisywane uwagi do wiadomości wszystkich pracowników ale chcemy się zabezpieczyć aby ich nikt nie zmieniał i nie usuwał.

Pozdrawiam,


Daniel

Zatem wydaje mi się, że ta druga opcja będzie lepsza. Wszystko w jednej zakładce i odpowiednie pole do filtrowania / nadawania uprawnień.

Ok. A znajdę gdzieś jakiś opis lub przykład?

Zdecyduj czy checkbox jest wystarczający, czy będziesz chciał w przyszłości więcej uprawnień.
Jeżeli checkbox jest ok, to dodaj nowe pole do notatek typu checkbox, a potem edytuj prawa dostępu.
Jeżeli chciałbyś mieć więcej wyboru, to musisz najpierw stworzyć odpowiednie commondata, a potem dodać pole typu select, aby wybierało z tego commondata

http://www.epesi.org/Utils/CommonData

Pozdrawiam,
Adam

6 months later

Witam,

Dodałem ten moduł co go zrobiłem samodzielnie ale okazuje się że jak dodamy coś do tej zakładki w stylu uwagi to nie zapisuje tego. Przy zapisie nie ma żadnych błędów ale w liście tych "notatek" nic nie ma.
Czyli cały proces zapisu wypełniania jest ok a sekcji Warunki handlowe nic się nie pojawia. Ta zakładka była bardzo rzadko używana ale wydaje mi się że działała. Ostatnio robiłem upgrade do 1.7.1 - może to jest problemem?

5 days later

Niestety, ale nie jestem w stanie pomóc w ten sposób. Za mało danych, kod którego nie znam. Tak poza tym to polecam zrobić upgrade do 1.7.2, co prawda to raczej nie pomoże, ale warto 🙂

16 days later

Kod jest banalnie prosty bo zrobiony na przykładzie "HelloWorld" 🙂
W załączeniu wszystkie pliki.

WarunkiHandloweInstall.php

<?php
defined("_VALID_ACCESS") || die('Direct access forbidden');
class Custom_WarunkiHandloweInstall extends ModuleInstall {
    public function install() { // Here you can place the installation process for the module
$tab = 'company'; // notatki do firm
$label = _V('Warunki handlowe'); // etykieta do wyświetlenia
Utils_RecordBrowserCommon::new_addon($tab, $this->get_type(), 'body', $label);
return true;
 }

public function uninstall() { // Here you can place uninstallation process for the module
$tab = 'company'; // notatki do firm
Utils_RecordBrowserCommon::delete_addon($tab, $this->get_type(), 'body');
return true;
   }

public function info() { // Returns basic information about the module which will be available in the epesi Main Setup

    return array( 'Author'=>'Daniel',
        'License'=>'<>',
                 'Description'=>'');

}

public function simple_setup() { // Indicates if this module should be visible on the module list in Main Setup's simple view

    return array('package' => __('WarunkiHandlowe'), 'version'=>'0.1'); // - now the module will be visible as "HelloWorld" in simple_view

}

public function requires($v) { // Returns list of modules and their versions, that are required to run this module

    return array();

}

public function version() { // Return version name of the module

    return array('0.1');

}
}

?>

WarunkiHandloweCommon_0.php

<?php
    defined("_VALID_ACCESS") || die('Direct access forbidden');
    class Custom_WarunkiHandloweCommon extends ModuleCommon {
    }
?>

WarunkiHandlowe_0.php

<?php
defined("_VALID_ACCESS") || die('Direct access forbidden'); // - security feature
class Custom_WarunkiHandlowe extends Module { // - notice how the class name represents its path
public function body($record, $rb) {
$group = $rb->tab . '__my_notes/' . $record['id'];  // <-- to jest kluczowy fragment który odróżnia normalne notatki od tych innych
$notes = $this->init_module('Utils/Attachment', $group);
$notes->set_view_func(array('Utils_RecordBrowserCommon','create_default_linked_label'),array($rb->tab, $record['id']));
$this->display_module($notes);
}
}
?>

Witaj,
błąd jest tutaj:

$group = $rb->tab . '__my_notes/' . $record['id'];  // <-- to jest kluczowy fragment który odróżnia normalne notatki od tych innych

Jeżeli nie istnieje recordset o nazwie "company__my_notes" to system nie pozwoli podpiąć pod niego notatki. Reasumując stwórz pusty recordset o tej nazwie poprzez moduł Utils->RecordBrowser->CustomRecordsets (po zainstalowaniu poprzez Advanced View moduł jest tutaj: Menu->Administrator->Custom Recordsets).

Czy o to chodzi? :

alt text

Bo się pogubiłem co tu wpisać.

Pozdrawiam,

Daniel

nazwa: company__my_notes
Napis: Notki warunków handlowych
reszta pusta

Dodałem 🙂
Przy próbie zapisu takiej notatki - pojawia się okno Dostęp zabroniony ale notatka po ponownym wejściu jest widoczna. Więc gdzieś jeszcze trzeba dać jakieś uprawnienia.

Menu->Administrator->Record Browser - wybierz utworzony przez siebie recordset i w Permissions/Uprawnienia ustaw dla odpowiednie uprawnienia...

Te uprawnienia są ustawione

alt text

Jedyna różnica w porównaniu do standardowych uprawnień że tam są zaptaszkowane pola a tu nie ma pól do wyboru

alt text

tak, trzeba dodać jakiekolwiek pole w zakładce zarządzaj polami... wtedy zacznie działać - przetestowałem właśnie.

faktycznie po dodaniu pola działa 🙂
dzięki

Write a Reply...