Naprawa buga ze zwracaniem wartości z funkcji async

This commit is contained in:
2024-01-15 10:58:52 +01:00
parent 2e6db44bd2
commit f949b4438b
5 changed files with 130 additions and 107 deletions

View File

@@ -1,10 +1,10 @@
# OSCOP #
Pliki związane z OSCOP. Żeby działał trzeba stworzyć kopie jednego komponenta z place-order(testowane na komponencie układ) i resztę usunąć. Następnie wkleić kod w odpowiednie miejsca w skopiowanym komponencie:
index.xslt w XML/XSLT\
wydzielonyScript.js w Wydzielony Javascript\
script.js w Javascript\
style.css w Less/CSS\
Dodatkowo Trzeba będzie zrobić przekierowanie (można nawet dodatkiem) po kliknięciu na "Przejdź dalej" do strony "place-order.php"
\index.xslt w XML/XSLT
\wydzielonyScript.js w Wydzielony Javascript
\script.js w Javascript
\style.css w Less/CSS
\Dodatkowo Trzeba będzie zrobić przekierowanie (można nawet dodatkiem) po kliknięciu na "Przejdź dalej" do strony "place-order.php"
## Ikony markera na mapie ##
Aby dodać zdjęcie ikony: moderacja -> cms -> Zarządzanie plikami dla CMS. Żeby dodać nową ikonę trzeba dodać nowy obiekt w mapMarkerUrls. Można do tam wybrać link url do ikony, rozmiar, klasę. Dodatkowe opcje znajdują się w dokumentacji Leaflet w opcjach markera: https://leafletjs.com/reference.html#marker
@@ -17,33 +17,34 @@ Aby je zmienić trzeba wejść w panel -> moderacja -> działanie sklepu -> Pane
Następnie wejść w edycje wybranego sposobu logowania i wrzucić nową ikonę w miejsce "Grafika mała na stronie". UWAGA! Plików svg nie da się wprowadzić.
## Brakujące Tłumaczenia (literały) ##
Trzeba je później podmienić w kodzie w Wydzielonym Java script na np.:\
<iai:variable vid="Pokaż Listę"/>
Trzeba je później podmienić w kodzie w Wydzielonym Java script na np.:
\<iai:variable vid="Pokaż Listę"/>
### Wydzielony Javascript ###
Pokaż Listę\
Pokaż Mapę\
Błąd podczas zmiany kraju. Przeładuj stronę jeszcze raz.\
Błąd podczas logowania, proszę spróbować ponownie\
banków\
kart płatniczych\
Lista\
Wybierz z\
Pokaż Listę
\Pokaż Mapę
\Błąd podczas zmiany kraju. Przeładuj stronę jeszcze raz.
\Błąd podczas logowania, proszę spróbować ponownie
\banków
\kart płatniczych
\Lista
\Wybierz z
## Zalety ##
Zablokowana edycja danych osobowych w trakcie zamówienia(klient dalej może wysłać zamówienie na inny adres).\
Zmiana sposobów dostaw zależnie od państwa(Czasami się buguje, może to być zależne od plików cookies)\
Sprawdzenie czy wpisano dobry bon towarowy przed złożeniem zamówienia\
lepiej zabezpieczony numer telefonu?(na standardzie to +2+++++++++1 przejdzie)\
autouzupełnianie metod płatności i dostawy w edycji\
autouzupełnianie metod płatności i dostawy na podstawie poprzednio wykonanego zakupu\
Zablokowana edycja danych osobowych w trakcie zamówienia(klient dalej może wysłać zamówienie na inny adres).
\Zmiana sposobów dostaw zależnie od państwa(Czasami się buguje, może to być zależne od plików cookies)
\Sprawdzenie czy wpisano dobry bon towarowy przed złożeniem zamówienia
\lepiej zabezpieczony numer telefonu?(na standardzie to +2+++++++++1 przejdzie)
\autouzupełnianie metod płatności i dostawy w edycji
\autouzupełnianie metod płatności i dostawy na podstawie poprzednio wykonanego zakupu
## Minusy ##
nie ma faktury na inne dane(żeby nie używać tego samego zapytania co OSCOP Idosella, na wszelki wypadek żeby nie pobierało opłat)
## Dodatkowe pomysły do zrealizowania ##
sprawdzanie logina w trakcie pisania(może być słabe dla ochrony danych klienta)\
Limit znaków | Wydłużanie się okienka od uwag do sklepu|kuriera
sprawdzanie logina w trakcie pisania(może być słabe dla ochrony danych klienta)
\Limit znaków | Wydłużanie się okienka od uwag do sklepu|kuriera
## Uwagi ##
W przypadku edycji zamówienia z zapłatą za pobraniem nie można pobrać danych takiego zamówienia przed dokonaniem zapłaty. Idosell sprawdza ten problem w komunikacie na zooart6.
\ Dziwna rzecz którą zauważyłem. Jak składasz zamówienie wraz z zakładaniem konta, ale okazuje się że brakuje któregoś produktu w koszyku, to konto dalej się zakłada(ponieważ w takiej sytuacji najpierw zakłada się konto, a później składa się zamówienie)

View File

@@ -86,7 +86,10 @@
<iaixsl:attribute name="href"><iaixsl:value-of select="@login_url"/></iaixsl:attribute>
<img>
<iaixsl:attribute name="src">
<iaixsl:value-of select="@gfx"></iaixsl:value-of>
<iaixsl:choose>
<iaixsl:when test="@gfx"><iaixsl:value-of select="@gfx"></iaixsl:value-of></iaixsl:when>
<iaixsl:otherwise><iaixsl:value-of select="@gfx_big"></iaixsl:value-of></iaixsl:otherwise>
</iaixsl:choose>
</iaixsl:attribute>
<iaixsl:attribute name="alt">
<iaixsl:value-of select="@name"></iaixsl:value-of>
@@ -880,12 +883,14 @@
<input type="checkbox" id="rebate_option" name="rebate_option" class="--arrow-input"></input>
<label for="rebate_option" class="--arrow-label"><iai:variable vid="Posiadasz kod rabatowy?"/></label>
</div>
<div class="rebate__code has-feedback">
<div class="rebate__code-container">
<div class="rebate__code">
<div class="rebate__code-container has-feedback">
<div>
<input type="text" id="rebate_code" name="rebate_code" class="form-control">
<iaixsl:attribute name="placeholder"><iai:variable vid="Wpisz kod rabatowy"/></iaixsl:attribute>
</input>
<span class="form-control-feedback"></span>
</div>
<button class="rebate__code-realize bm-oscop__btn"><iai:variable vid="Zrealizuj"/></button>
</div>
</div>

View File

@@ -841,9 +841,11 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
// Przygotowanie Płatności
e.prepaids_method.forEach(function (method) {
const checkedPayment = paymentValue === method.id;
const markup = `
<label class="osc_item" for="payitem_${method.id}">
<input id="payitem_${method.id}" value="${method.id}" type="radio" name="payform_id" ${paymentValue === method.id ? "checked" : ""} data-group="${method.group}">
<input id="payitem_${method.id}" value="${method.id}" type="radio" name="payform_id" ${checkedPayment ? "checked" : ""} data-group="${method.group}">
<div class="photo">
<img src="${method.icon}" alt="${method.name}">
</div>
@@ -917,7 +919,7 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
// Wstawienie pickuppoint jeśli edycja i istnieje
if(data?.pickupData !== undefined && data?.pickupData !== null){
const selectedShipping = document.querySelector(`#cop_seection2 input#${deliveryId}`);
const pointExists = checkPrevPickupPoint(
checkPrevPickupPoint(
selectedShipping.parentElement.querySelector(".fselectedPoint"),
data.pickupData.id,
data.pickupData.name,
@@ -925,11 +927,10 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
data.pickupData.address.city,
data.pickupData.address.postcode,
data.deliveryMethodId
);
).then(pointExists=>{
// Odznaczenie punktu jeśli punkt odbioru nie istnieje(Wcześniej był zaznaczony przy edycji)
if(!pointExists) selectedShipping.checked = false;
});
}// Sprawdzenie czy użytkownik ma zapisane poprzednio użyte metody w przeglądarce(tylko przy pierwszym załadowaniu strony)
else if(localStorage.getItem("prevPaymentMethod") && localStorage.getItem("prevDeliveryMethod") && firstLoad){
const prevPaymentMethod = JSON.parse(localStorage.getItem("prevPaymentMethod"));
@@ -949,7 +950,7 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
if(prevDeliveryInput){
// sprawdzenie czy dostawa miała punkt odbioru
if(prevDeliveryMethod.fselectedPoint){
const pointExists = checkPrevPickupPoint(
checkPrevPickupPoint(
prevDeliveryInput.parentElement.querySelector(".fselectedPoint"),
prevDeliveryMethod.fselectedPoint.deliveryPointId,
prevDeliveryMethod.fselectedPoint.name,
@@ -957,13 +958,21 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
prevDeliveryMethod.fselectedPoint.city,
prevDeliveryMethod.fselectedPoint.zipcode,
prevDeliveryMethod.fselectedPoint.courierId
);
).then(pointExists=>{
if(pointExists) prevDeliveryInput.checked = true;
});
}else{
prevDeliveryInput.checked = true;
}
}
}
// Zaznaczenie karty/banku w przypadku edycji
const checkedPayment = document.querySelector(`#osc_prepaids_method input[name="payform_id"]:checked`)
if(checkedPayment && (checkedPayment.dataset.group === "card" || checkedPayment.dataset.group === "transfer")){
cloneElement(checkedPayment);
}
// Przeładowanie mapy
loadMap();
// Przeliczenie kosztu dostawy
@@ -1042,6 +1051,7 @@ const SEARCH_PICKUP_POINTS_QUERY = (searchPickupPointsInput) => JSON.stringify({
}`,
})
async function checkPrevPickupPoint(selectedPoint, deliveryPointId, name, street, city, zipcode, courierId){
if(!name || !city || !zipcode) return false;
// Pobranie punktów z tym samym id co poprzedni
app_shop.fn.ajaxLoadSite(1)
const resultData = await fetchData({
@@ -1484,7 +1494,7 @@ async function updateCode(){
// Pokazanie błędu
const { message } = rebateStatus?.data?.activateRebateCode?.error;
addError(rebateCode);
rebateCode.insertAdjacentHTML("afterend",`<span class="help-block validate_message text-danger">${message}.</span>`);
addErrorMessage(rebateCode, message);
// Schowaj kod (show=false, error=true)
toggleActiveCode(false, true);
}
@@ -1561,7 +1571,7 @@ rebateCode.addEventListener("keydown", e=>{
// ZŁOŻENIE ZAMÓWIENIA
// Zwaliduj wszystkie dostępne inputy zawierające dane klienta i dane adresowe
function validateAllInputs(){
async function validateAllInputs(){
// Zmienna trzymająca informację czy wystąpił jakiś błąd
let allGood = true;
@@ -1572,12 +1582,12 @@ function validateAllInputs(){
}
if(!document.querySelector(".--logged")){
// Sprawdzenie emaila i telefonu
allGood = validateRequest(document.getElementById("client_email"), true) && allGood;
allGood = await validateRequest(document.getElementById("client_email"), true) && allGood;
allGood = validatePhone(document.getElementById("client_phone")) && allGood;
// Sprawdzenie nazwy firmy i nipu
if(document.getElementById("client_type1").checked){
allGood = validateNotEmpty(document.getElementById("client_firm")) && allGood;
allGood = validateRequest(document.getElementById("client_nip"), true) && allGood;
allGood = await validateRequest(document.getElementById("client_nip"), true) && allGood;
}
// Sprawdzenie reszty pól
allGood = validateFormInputs("client") && allGood;
@@ -1589,13 +1599,13 @@ function validateAllInputs(){
}
return allGood
}
function validateFormInputs(query){
async function validateFormInputs(query){
let isFormGood = true;
isFormGood = validateNotEmpty(document.getElementById(`${query}_firstname`)) && isFormGood;
isFormGood = validateNotEmpty(document.getElementById(`${query}_lastname`)) && isFormGood;
isFormGood = validateStreet(document.getElementById(`${query}_street`)) && isFormGood;
isFormGood = validateRequest(document.getElementById(`${query}_zipcode`),true) && isFormGood;
isFormGood = await validateRequest(document.getElementById(`${query}_zipcode`),true) && isFormGood;
isFormGood = validateNotEmpty(document.getElementById(`${query}_city`)) && isFormGood;
return isFormGood;
@@ -1887,6 +1897,7 @@ async function addClient(succes, error){
const saveToSms = document.getElementById("client_sms");
let saveToSmsData = false;
if(saveToSms && saveToSms.checked) saveToSmsData = true;
const registerClientData = await fetchData({
data: REGISTER_CLIENT(`RegisterClientInput: {
clientData: {

View File

@@ -305,7 +305,7 @@
line-height: 43px;
}
.has-error .form-control-feedback, .has-success .form-control-feedback {
line-height: 38px;
line-height: 34px;
}
select{
cursor: pointer;
@@ -837,39 +837,38 @@
fill: @less_iaicolorscheme_background_active_color!important;
}
}
.rebate, .rebate .rebate__code .rebate__code-container:has(.help-block.validate_message.text-danger){
.rebate{
margin-bottom: 2rem;
}
.rebate{
padding-bottom: 0.9rem;
border: 1px solid #ccc;
border-radius: 8px;
.rebate__options, .rebate__code .rebate__code-container{
.rebate__options, .rebate__code{
display: flex;
align-items: center;
}
.rebate__code{
display: none;
.rebate__code-container{
gap: 2rem;
display: grid;
grid-template-columns: 5fr 3fr;
padding: 2rem 1rem 0 1rem;
> div{
position: relative;
margin-right: 2rem;
}
.help-block.validate_message.text-danger{
position: absolute;
bottom: 0;
transform: translateY(150%);
grid-column: 1 / span2;
margin-top: 1rem;
}
}
.form-control-feedback{
line-height: 75px!important;
right: 47%!important;
}
#rebate_code{
margin: 0!important;
display: inline-block;
}
.rebate__code-realize{
padding: 1rem 14%;
padding: 1rem;
}
}
.rebate__active .rebate__active-options{
@@ -926,9 +925,6 @@
.zipcode_wrapper{
padding-right: 0!important;
}
#cop_seection3 .rebate .rebate__code .form-control-feedback{
right: 34vw!important;
}
}
@media(max-width: 757px){
.form-control-feedback{
@@ -1114,22 +1110,22 @@
font-size: 2rem!important;
}
.rebate .rebate__code-container{
flex-direction: column;
gap: 1.2rem!important;
align-items: flex-start!important;
gap: 1.2rem;
grid-template-columns: 1fr!important;
> div{
margin-right: 0!important;
grid-column: 1 / span1;
}
.help-block.validate_message.text-danger{
position: static!important;
transform: translateY(0%)!important;
grid-column: 1 / span1!important;
grid-row: 2 / span1;
margin-bottom: 1rem;
margin-top: 0!important;
}
.form-control-feedback{
line-height: 83px!important;
right: 0%!important;
.rebate__code-realize{
grid-column: 1 / span1;
}
}
.rebate__code-container:has(.help-block.validate_message.text-danger){
margin-bottom: 0!important;
}
.rebate__code-realize{
width: 100%;
}

View File

@@ -838,9 +838,11 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
// Przygotowanie Płatności
e.prepaids_method.forEach(function (method) {
const checkedPayment = paymentValue === method.id;
const markup = `
<label class="osc_item" for="payitem_${method.id}">
<input id="payitem_${method.id}" value="${method.id}" type="radio" name="payform_id" ${paymentValue === method.id ? "checked" : ""} data-group="${method.group}">
<input id="payitem_${method.id}" value="${method.id}" type="radio" name="payform_id" ${checkedPayment ? "checked" : ""} data-group="${method.group}">
<div class="photo">
<img src="${method.icon}" alt="${method.name}">
</div>
@@ -914,7 +916,7 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
// Wstawienie pickuppoint jeśli edycja i istnieje
if(data?.pickupData !== undefined && data?.pickupData !== null){
const selectedShipping = document.querySelector(`#cop_seection2 input#${deliveryId}`);
const pointExists = checkPrevPickupPoint(
checkPrevPickupPoint(
selectedShipping.parentElement.querySelector(".fselectedPoint"),
data.pickupData.id,
data.pickupData.name,
@@ -922,11 +924,10 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
data.pickupData.address.city,
data.pickupData.address.postcode,
data.deliveryMethodId
);
).then(pointExists=>{
// Odznaczenie punktu jeśli punkt odbioru nie istnieje(Wcześniej był zaznaczony przy edycji)
if(!pointExists) selectedShipping.checked = false;
});
}// Sprawdzenie czy użytkownik ma zapisane poprzednio użyte metody w przeglądarce(tylko przy pierwszym załadowaniu strony)
else if(localStorage.getItem("prevPaymentMethod") && localStorage.getItem("prevDeliveryMethod") && firstLoad){
const prevPaymentMethod = JSON.parse(localStorage.getItem("prevPaymentMethod"));
@@ -946,7 +947,7 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
if(prevDeliveryInput){
// sprawdzenie czy dostawa miała punkt odbioru
if(prevDeliveryMethod.fselectedPoint){
const pointExists = checkPrevPickupPoint(
checkPrevPickupPoint(
prevDeliveryInput.parentElement.querySelector(".fselectedPoint"),
prevDeliveryMethod.fselectedPoint.deliveryPointId,
prevDeliveryMethod.fselectedPoint.name,
@@ -954,13 +955,21 @@ function getNewPaymentsAndDeliveries(data = null, firstLoad = false) {
prevDeliveryMethod.fselectedPoint.city,
prevDeliveryMethod.fselectedPoint.zipcode,
prevDeliveryMethod.fselectedPoint.courierId
);
).then(pointExists=>{
if(pointExists) prevDeliveryInput.checked = true;
});
}else{
prevDeliveryInput.checked = true;
}
}
}
// Zaznaczenie karty/banku w przypadku edycji
const checkedPayment = document.querySelector(`#osc_prepaids_method input[name="payform_id"]:checked`)
if(checkedPayment && (checkedPayment.dataset.group === "card" || checkedPayment.dataset.group === "transfer")){
cloneElement(checkedPayment);
}
// Przeładowanie mapy
loadMap();
// Przeliczenie kosztu dostawy
@@ -1039,6 +1048,7 @@ const SEARCH_PICKUP_POINTS_QUERY = (searchPickupPointsInput) => JSON.stringify({
}`,
})
async function checkPrevPickupPoint(selectedPoint, deliveryPointId, name, street, city, zipcode, courierId){
if(!name || !city || !zipcode) return false;
// Pobranie punktów z tym samym id co poprzedni
app_shop.fn.ajaxLoadSite(1)
const resultData = await fetchData({
@@ -1481,7 +1491,7 @@ async function updateCode(){
// Pokazanie błędu
const { message } = rebateStatus?.data?.activateRebateCode?.error;
addError(rebateCode);
rebateCode.insertAdjacentHTML("afterend",`<span class="help-block validate_message text-danger">${message}.</span>`);
addErrorMessage(rebateCode, message);
// Schowaj kod (show=false, error=true)
toggleActiveCode(false, true);
}
@@ -1558,7 +1568,7 @@ rebateCode.addEventListener("keydown", e=>{
// ZŁOŻENIE ZAMÓWIENIA
// Zwaliduj wszystkie dostępne inputy zawierające dane klienta i dane adresowe
function validateAllInputs(){
async function validateAllInputs(){
// Zmienna trzymająca informację czy wystąpił jakiś błąd
let allGood = true;
@@ -1569,12 +1579,12 @@ function validateAllInputs(){
}
if(!document.querySelector(".--logged")){
// Sprawdzenie emaila i telefonu
allGood = validateRequest(document.getElementById("client_email"), true) && allGood;
allGood = await validateRequest(document.getElementById("client_email"), true) && allGood;
allGood = validatePhone(document.getElementById("client_phone")) && allGood;
// Sprawdzenie nazwy firmy i nipu
if(document.getElementById("client_type1").checked){
allGood = validateNotEmpty(document.getElementById("client_firm")) && allGood;
allGood = validateRequest(document.getElementById("client_nip"), true) && allGood;
allGood = await validateRequest(document.getElementById("client_nip"), true) && allGood;
}
// Sprawdzenie reszty pól
allGood = validateFormInputs("client") && allGood;
@@ -1586,13 +1596,13 @@ function validateAllInputs(){
}
return allGood
}
function validateFormInputs(query){
async function validateFormInputs(query){
let isFormGood = true;
isFormGood = validateNotEmpty(document.getElementById(`${query}_firstname`)) && isFormGood;
isFormGood = validateNotEmpty(document.getElementById(`${query}_lastname`)) && isFormGood;
isFormGood = validateStreet(document.getElementById(`${query}_street`)) && isFormGood;
isFormGood = validateRequest(document.getElementById(`${query}_zipcode`),true) && isFormGood;
isFormGood = await validateRequest(document.getElementById(`${query}_zipcode`),true) && isFormGood;
isFormGood = validateNotEmpty(document.getElementById(`${query}_city`)) && isFormGood;
return isFormGood;